简单工厂模式之我见
2016-06-16 21:05
253 查看
简单工厂模式Simple Factory根据提供给它的数据,返回一个类的实例。通常它返回的类都有一个公共的父类(或者接口对象)。
简单工厂的作用是实例化对象,而不需要客户了解这个对象属于哪个具体的子类。简单工厂实例化的类具有相同的接口或者基类,在子类比较固定并不需要扩展时,可以使用简单工厂。如数据库生产工厂就是简单工厂的一个应用。
采用简单工厂的优点是可以使用户根据参数获得对应的类实例,避免了直接实例化类,降低了耦合性;缺点是可实例化的类型在编译期间已经被确定,如果增加新类型,则需要修改工厂,不符合OCP(开闭原则)的原则。简单工厂需要知道所有要生成的类型,当子类过多或者子类层次过多时不适合使用。
下面是我实例中的类结构图,它有一个ICreate的公共接口,有一个方法叫Create,返回值为Void
其中公用的接口代码如下:(最后工厂的返回值类型)
而下面,分别用people和animal两个类去实现了ICreate接口,并实现了它的Create方法。
而对于外界来说,会有另一个类去为外界提供服务,它们可以需要建立People或者Animal类型的实现,代码如下:
最后,在使用它时,直接使用CreateFactory.GeneratorCreate("类型条件名")即可生成你的类对象了。
简单工厂的作用是实例化对象,而不需要客户了解这个对象属于哪个具体的子类。简单工厂实例化的类具有相同的接口或者基类,在子类比较固定并不需要扩展时,可以使用简单工厂。如数据库生产工厂就是简单工厂的一个应用。
采用简单工厂的优点是可以使用户根据参数获得对应的类实例,避免了直接实例化类,降低了耦合性;缺点是可实例化的类型在编译期间已经被确定,如果增加新类型,则需要修改工厂,不符合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("类型条件名")即可生成你的类对象了。
相关文章推荐
- C# 设计模式系列教程-简单工厂模式
- C++设计模式之工厂模式
- 介绍php设计模式中的工厂模式
- asp.net 简单工厂模式和工厂方法模式之论述
- 深入理解JavaScript系列(28):设计模式之工厂模式详解
- js简单工厂模式用法实例
- JavaScript设计模式经典之工厂模式
- javascript 模式设计之工厂模式详细说明
- 实例解析Java单例模式编程中对抽象工厂模式的运用
- python中getattr函数使用方法 getattr实现工厂模式
- 工厂模式在Zend Framework中应用介绍
- 浅析php工厂模式
- C++设计模式之抽象工厂模式
- C++设计模式之简单工厂模式实例
- c#使用简单工厂模式实现生成html文件的封装类分享
- PHP高级对象构建 工厂模式的使用
- 基于php设计模式中工厂模式详细介绍
- PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
- JavaScript面向对象程序设计教程
- C++设计模式之工厂方法模式