简单工厂
简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。
跟随代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 /// <summary> 2 /// 基类/接口/抽象类 3 /// </summary> 4 public class Person 5 { 6 public virtual void ShowMsg() { } 7 } 8 9 /// <summary> 10 /// 实现类 11 /// </summary> 12 public class Chinese : Person 13 { 14 public override void ShowMsg() 15 { 16 Console.WriteLine("I am Chinese!"); 17 } 18 } 19 20 /// <summary> 21 /// 实现类 22 /// </summary> 23 public class English : Person 24 { 25 public override void ShowMsg() 26 { 27 Console.WriteLine("I am English!"); 28 } 29 } 30 31 /// <summary> 32 /// 实现类 33 /// </summary> 34 public class Japanese : Person 35 { 36 public override void ShowMsg() 37 { 38 Console.WriteLine("I am Japanese!"); 39 } 40 } 41 42 /// <summary> 43 /// 工厂类 44 /// </summary> 45 public static class SFactory 46 { 47 /// <summary> 48 /// 通过面向对象的多态性,根据客户端输入的参数,返回基类(接口/抽象类)类型的实例 49 /// </summary> 50 /// <param name="parmVal">parmVal</param> 51 /// <returns>Person</returns> 52 public static Person Create(string parmVal) 53 { 54 Person per = null; 55 switch (parmVal) 56 { 57 case "e": 58 per = new English(); 59 break; 60 case "c": 61 per = new Chinese(); 62 break; 63 case "j": 64 per = new Japanese(); 65 break; 66 default: 67 break; 68 } 69 return per; 70 } 71 }
图示:
使用:
- 工厂类负责创建的对象比较少;
- Client端只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心;
- 由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用。