您的位置:首页 > 其它

简单工厂模式之我见

2016-06-16 21:05 253 查看
简单工厂模式Simple Factory根据提供给它的数据,返回一个类的实例。通常它返回的类都有一个公共的父类(或者接口对象)。
简单工厂的作用是实例化对象,而不需要客户了解这个对象属于哪个具体的子类。简单工厂实例化的类具有相同的接口或者基类,在子类比较固定并不需要扩展时,可以使用简单工厂。如数据库生产工厂就是简单工厂的一个应用。

         采用简单工厂的优点是可以使用户根据参数获得对应的类实例,避免了直接实例化类,降低了耦合性;缺点是可实例化的类型在编译期间已经被确定,如果增加新类型,则需要修改工厂,不符合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("类型条件名")即可生成你的类对象了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  工厂模式