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

设计模式~简单工厂模式(Factory)

时间:2015-09-25 09:38:06      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:

     简单工厂模式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("类型条件名")即可生成你的类对象了。

 

以上内容转自 张占岭

设计模式~简单工厂模式(Factory)

标签:

原文地址:http://www.cnblogs.com/james641/p/4837136.html

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