简单工厂模式(Simple Factory)示例源码

* 模式分析

   简单工厂模式根据提供给它的数据,返回几个类中的一个类的实例,通常返回的类都有一个公共父类和公共方法.

* 实施过程

                                                                                            

                                                                Love

                                      HaBaoZhuLove    XueHaiYingLove    
LoveSimpleFactory
+ Create(string LoveWho) :Love

 

 * 源码分析与实现

    ~ 工厂类角色LoveSimpleFactory:工厂类在客户端的直接控制下(Create方法)创建产品对象.

    ~ 抽象产品角色Love:定义简单工厂创建的对象的父类或它们共同拥有的接口.可以是一个类,抽象类或接

       口.

    ~ 具体产品角色HaBaoZhuLove,XueHaiYingLove:定义工厂具体加工出的对象.

    控制台程序:program.cs

                  
 1      using System;
 2                        using System.Collections.Generic;
 3                        using System.Text;
 4 
 5 /*该源码由邹江平2008-8-12编写,如有学习者请与QQ:200580231联系*/
 6 namespace X8023Z//命名空间
 7 {
 8     class Program
 9     {  //在客户端类中调用工厂类LoveSimpleFactory中的Create方法,创建产品对象
10         static void Main(string[] args)
11         {
12             LoveSimpleFactory lsf = new LoveSimpleFactory();
13             Love l = lsf.Create("哈宝猪");
14             l.Start();
15             l.End();
16             Console.WriteLine("-----------------");
17             l = lsf.Create("薛海英");
18             l.Start();
19             l.End();
20 
21         }
22     }
23     //定义抽象类Love,并声明两个抽象方法
24     public abstract class Love
25     {
26         public abstract void Start();
27         public abstract void End();
28     }
29    //定义类HaBaoZhuLove,继承抽象类Love,然后实现Start()和End()方法
30     public class HaBaoZhuLove : Love
31     {
32         public override void Start()
33         {
34             Console.WriteLine("开始爱哈宝猪!");
35             Console.WriteLine("请按任意键继续 !");
36             Console.Read();
37         }
38 
39         public override void End()
40         {
41             Console.WriteLine("爱哈宝猪结束!");
42             Console.WriteLine("请按任意键退出 !");
43             Console.Read();
44             Console.Read();
45         }
46     }
47     //定义类XueHaiYingLove,继承抽象类Love,然后实现Start()和End()方法
48     public class XueHaiYingLove : Love
49     {
50         public override void Start()
51         {
52             Console.WriteLine("开始爱薛海英!");
53             Console.WriteLine("请按任意键继续 !");
54             Console.Read();
55         }
56 
57         public override void End()
58         {
59             Console.WriteLine("爱薛海英结束!");
60             Console.WriteLine("请按任意键继续 !");
61             Console.Read();
62         }
63     }
64     //定义LoveSimpleFactory类,该类实现工厂生产工作,故通过Create生产HaBaoZhu和XueHaiYing.
65     public class LoveSimpleFactory
66     {
67         public Love Create(string LoveWho)
68         {
69             if (LoveWho == "哈宝猪")
70                 return new XueHaiYingLove();
71             else if (LoveWho == "薛海英")
72                 return new HaBaoZhuLove();
73             else
74                 return null;
75         }
76     }
77 
78  }
79 

/*该源码由邹江平2008-8-12编写,如有学习者请与QQ:200580231联系*/

   *  补充说明

       优点:工厂类含有必要的判断逻辑,可以决定在什么时候创建一个产品类的实例,客户端可以免除直接创建

              产品对象的责任,而仅仅"消费"产品.简单工厂模式实现了对责任的分割.

      缺点:当产品有复杂的多层等级结构时,工厂类只有自己,以不变应万变,就是模式的特点.因为工厂类集中了

             所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响,同时,系统扩展困难,一旦添加新产品

             就不得不修改工厂逻辑,有可能造成工厂逻辑过于复杂


             /*该源码由邹江平2008-8-12编写,如有学习者请与QQ:200580231联系*/

 


posted @ 2008-08-13 01:01  HiEagle  阅读(1281)  评论(0编辑  收藏  举报