设计模式之——简单工厂模式

最近在看一些关于设计模式方面的知识,打算把学习过程给记录下来,进一步加深自己的理解。

百度百科定义是:从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是实由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单用的模式,可以理解为是不同工厂模式的一个特殊实现。

 我是这么理解的:有一个创建工厂它可以生产各种不同的产品,例如:ipad、ipod、iphone三种产品(三个类),我们把这三个产品抽象成一个AppleProducts类,然后呢,把这三个产品类分别继承这个抽象类(AppleProducts)。而工厂类我们创建一个生产产品的方法,通过不同的命令来实例化不同的产品(通过方法传参来实现),从而达到实例化(生产)不同的产品实例的目的。

    好吧,先上代码:

      首先创建产品抽象类(AppleProducts):

AppleProducts
1 //产品抽象类所有产品类继承此类
2   class AppleProducts
3 {
4
5 private string _productName = null;//产品名称(属性)
6  
7 public string ProductName
8 {
9 get { return _productName; }
10 set { _productName = value; }
11 }
12
13 //定义一个生产产品的虚方法,所有子类重写此方法
14   public virtual string Production()
15 {
16 string productName = null;
17 return productName;
18 }
19 }

   现在分别创建Iphone、Ipod、Ipad类

Product Class
1 //Iphone类继承AppleProducts类,负责生产Iphone4
2   class Iphone : AppleProducts
3 {
4 public override string Production()
5 {
6 ProductName = "Iphone4";
7 string product = ProductName;
8 return "工厂生产线现在开始生产:" + product;
9 }
10 }
11
12
13 //Ipod类继承AppleProducts类 ,负责生产Ipod4
14   class Ipod : AppleProducts
15 {
16 public override string Production()
17 {
18 ProductName = "Ipod4";
19 string product = ProductName;
20 return "工厂生产线现在开始生产:" + product;
21 }
22 }
23
24
25 //Ipad类继承AppleProducts类 ,负责生产Ipad2
26   class Ipad : AppleProducts
27 {
28 public override string Production()
29 {
30 ProductName = "Ipad2";
31 string product = ProductName;
32 return "工厂生产线现在开始生产:" + product;
33 }
34 }

现在是最重要的生产工厂类了

AppleCreateFatory
1 //工厂类,根据调用者不同的命令来生产出不同的产品
2   class AppleCreateFatory
3 {
4 //创建产品的方法,通过switch()语句来判断实例化不同的产品对象
5   public static AppleProducts CreatProduct(string productName)
6 {
7 AppleProducts product = null;
8 switch (productName)
9 {
10 case "Iphone":
11 product = new Iphone();
12 break;
13 case "Ipod":
14 product = new Ipod();
15 break;
16 case "Ipad":
17 product = new Ipad();
18 break;
19 default:
20 product = new Ipad();//默认生产ipad
21 break;
22 }
23 return product;
24 }
25 }

测试代码(控制台输出)

Test Code
1 public static void Main(string[] args)
2 {
3 AppleProducts product = AppleCreateFatory.CreatProduct("Iphone");//创建一个Iphone类的实例
4 string result = product.Production();//调用生产方法
5 Console.WriteLine(result);//打印输出
6 Console.Read();//
7
8 }

运行效果:

 总结:

     简单工厂模式的好处在于当我们想要生产新的产品时只需要加一个新产品的类继承产品基类,重写生产产品方法,调用时,工厂根据不同的参数(命令)来返回不同对象的实例,每个产品类都有不同的生产细节和生产方式,调用者不必关注生产产品的细节,只要知道要生产那个产品就行了。缺点就在于关键的工厂类,每增加一种新产品就需要修改工厂类的判断逻辑,不适用复杂的生产环境。同时使用简单工厂模式不利于系统的拓展,所以只能适用于一些比较简单环境下使用。

posted on 2011-09-14 23:44  上校  阅读(212)  评论(0编辑  收藏  举报