采用简单工厂的优点是可以使用户根据参数获得对应的类实例,避免了直接实例化类,降低了耦合性;缺点是可实例化的类型在编译期间已经被确定,如果增加新类 型,则需要修改工厂,不符合OCP(开闭原则)的原则。简单工厂需要知道所有要生成的类型,当子类过多或者子类层次过多时不适合使用。
下面是我实例中的类结构图,它有一个ICreate的公共接口,有一个方法叫Create,返回值为Void
其中公用的接口代码如下:(最后工厂的返回值类型)
1 /// <summary> 2 /// 简单工厂接口,返回值类型 3 /// </summary> 4 public interface ICreate 5 { 6 void Create(); 7 }
而下面,分别用people和animal两个类去实现了ICreate接口,并实现了它的Create方法。
1 /// <summary> 2 /// 人类实现工厂接口 3 /// </summary> 4 public class People : ICreate 5 { 6 7 #region ICreate 成员 8 9 public void Create() 10 { 11 Console.WriteLine("创建人类"); 12 } 13 14 #endregion 15 } 16 /// <summary> 17 /// 动物实现工厂接口 18 /// </summary> 19 public class Animal : ICreate 20 { 21 22 #region ICreate 成员 23 24 public void Create() 25 { 26 Console.WriteLine("创建动物"); 27 } 28 29 #endregion 30 }
而对于外界来说,会有另一个类去为外界提供服务,它们可以需要建立People或者Animal类型的实现,代码如下:
1 public class CreateFactory 2 { 3 public static ICreate GeneratorCreate(string createName) { 4 switch (createName) 5 { 6 case "People": 7 return new People(); 8 case "Animal": 9 return new Animal(); 10 default: 11 throw new NotImplementedException(); 12 } 13 }
最后,在使用它时,直接使用CreateFactory.GeneratorCreate("类型条件名")即可生成你的类对象了。