码迷,mamicode.com
首页 > 其他好文 > 详细

简单工厂模式

时间:2018-11-22 18:12:26      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:views   pop   rac   toolbar   tps   bsp   stat   oid   实现   

 

    采用简单工厂的优点是可以使用户根据参数获得对应的类实例,避免了直接实例化类,降低了耦合性;缺点是可实例化的类型在编译期间已经被确定,如果增加新类 型,则需要修改工厂,不符合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("类型条件名")即可生成你的类对象了。

简单工厂模式

标签:views   pop   rac   toolbar   tps   bsp   stat   oid   实现   

原文地址:https://www.cnblogs.com/zyy1688/p/10002530.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!