设计模式之简单工厂模式
来源于http://www.cnblogs.com/wangjq/archive/2012/07/02/2558255.html
参考百度百科:http://baike.baidu.com/link?url=a474oHwogbzMHn7sFmOmbcc5DSbyquwAnhcgYmTzti4o6IG4u9PVs4ub4axkz8qx-lrv5rafK3RoiRK31p_7vK
常用语实例化对象:
一个工厂长生产多个同类产品 一对多
多个工厂生产多个同类产品 多对多
不同工厂生产不同产品 多对多
1. 概述:
将一个具体类的实例化交给一个静态工厂方法来执行,它不属于GOF的23种设计模式,但现实中却经常会用到
2. 模式中的角色
2.1 工厂类(Simple Factory): 只包含了创建具体类的静态方法。
2.2 抽象产品(Product):定义简单工厂中要返回的产品。
2.3 具体产品(ConcreteProduct):具体产品。
3. 模式解读
3.1 简单工厂模式的一般化类图
3.2 简单工厂模式的代码实现
1 /// <summary> 2 /// 简单工厂类,用sealed修饰, 3 /// </summary> 4 public class SimpleProductFactory 5 { 6 /// <summary> 7 /// 使用静态方法,根据传入的参数来指定要实例化哪一种产品 8 /// </summary> 9 /// <param name="productType"></param> 10 /// <returns></returns> 11 public static Product CreateProduct(string productType) 12 { 13 Product product = null; 14 switch (productType) 15 { 16 case "A": 17 product = new ConcreteProductA(); 18 break; 19 case "B": 20 product = new ConcreteProductB(); 21 break; 22 } 23 24 return product; 25 } 26 } 27 28 /// <summary> 29 /// 抽象产品 30 /// </summary> 31 public abstract class Product 32 { 33 public Product() 34 { } 35 36 public abstract void Opration(); 37 } 38 39 /// <summary> 40 /// 具体产品 A 41 /// </summary> 42 public class ConcreteProductA : Product 43 { 44 public ConcreteProductA() { } 45 46 public override void Opration() 47 { 48 // 产品A 49 } 50 } 51 52 /// <summary> 53 /// 具体产品 B 54 /// </summary> 55 public class ConcreteProductB : Product 56 { 57 public ConcreteProductB() { } 58 59 public override void Opration() 60 { 61 //产品B 62 } 63 }