【创建型设计模式】-简单工厂方法设计模式
2016-06-24 10:06
471 查看
单词:Creator [kriˈetɚ] 创造者,创作者; Product [ˈprɑdʌkt] 产品; 结果; 乘积; 作品; factory [ˈfæktəri] 工厂,制造厂; <古>代理店;
简单工厂方法设计模式的设计图纸
Creator 是一个工厂类, 根据“四人帮”的软件设计模式的记号,图中的右半部分的类叫做产品类,由接口 Product 与 具体的实现类产品类ConcreteProduct 组成。
产品类实际上代表被创建的类结构,而Creator 类 是简单工厂的核心部分。Creator 类 拥有一个方法 ,factory() 及工厂方法,该方法负责创建产品类的对象。简单工厂方法模式 的特点是仅仅一个具体的创建者类,并且在此类中包含一个静态的工厂方法 factory()。
简单工厂方法模式包含的各组成部分的意义如下:
1.Creator:是简单工厂方法模式的核心,包含应用程序所需的业务逻辑,当客户类 Client 需要的时候,委托工厂类创建产品的实例。
2.Product:可以是 C# 接口,或者C# 抽象类, 是具体的子类 的超类,或者共同接口。
3.ConcreteProduct:实现 Product 接口,或者继承抽象类 Product。
例子:汽车保险管理程序实例的最后解决方案及为简单工厂方法模式, 其设计图给出,下面给出相应的代码。
简单工厂方法模式的有点如下:
1.工厂方法包含从一个类的结构中选择初始类的业务逻辑。
2.客户类不直接创建产品的对象,客户类只作为对象的消费者。
3.简单工厂方法模式实现了责任分离。
4.客户类不负有创建类的对象责任,因此如果有新产品子类加入,不必修改已有的客户类代码(前提是客户类暂时不需要使用新的产品子类对象。)
5.因为工厂类中包含了对象生成的必要逻辑判断,根据客户端的选择条件对台实例化相关的类,所以客户端类中没有创建对象所需要的条件语句。
简单工厂方法模式的缺点如下:
1.由于工厂类必须知道怎么创建每个子类的对象,所以每当增加产品的类时候,都需要修改工厂方法,简单工厂方法模式不符合开闭原则。
2.因为工厂类的工厂方法是讲台的,所以工厂类中的方法不能被继承,简单工厂类只能是有一个单独的类,而不能成为一个层次的类。
简单工厂方法设计模式的设计图纸
Creator 是一个工厂类, 根据“四人帮”的软件设计模式的记号,图中的右半部分的类叫做产品类,由接口 Product 与 具体的实现类产品类ConcreteProduct 组成。
产品类实际上代表被创建的类结构,而Creator 类 是简单工厂的核心部分。Creator 类 拥有一个方法 ,factory() 及工厂方法,该方法负责创建产品类的对象。简单工厂方法模式 的特点是仅仅一个具体的创建者类,并且在此类中包含一个静态的工厂方法 factory()。
简单工厂方法模式包含的各组成部分的意义如下:
1.Creator:是简单工厂方法模式的核心,包含应用程序所需的业务逻辑,当客户类 Client 需要的时候,委托工厂类创建产品的实例。
2.Product:可以是 C# 接口,或者C# 抽象类, 是具体的子类 的超类,或者共同接口。
3.ConcreteProduct:实现 Product 接口,或者继承抽象类 Product。
例子:汽车保险管理程序实例的最后解决方案及为简单工厂方法模式, 其设计图给出,下面给出相应的代码。
namespace SimpleFactory { class Program { static void Main(string[] args) { //根据不同的场景实例出不同的类 IAutoInsurance ai = PolicyProducer.getPolicyObj("bodyInjure"); string desc = ai.getInsurInfo(); } } /// <summary> /// 工厂类 /// </summary> public class PolicyProducer { public static IAutoInsurance getPolicyObj(string option) { IAutoInsurance policy = null; switch (option) { case "bodyInjure": policy = new BodyInjur(); break; case "collision": policy = new Collision(); break; } return policy; } } /// <summary> /// 抽象产品 /// </summary> public interface IAutoInsurance { public string getInsurInfo(); } /// <summary> /// 产品类1 /// </summary> public class BodyInjur : IAutoInsurance { private string description; public string getInsurInfo() { return "bodyInjure"; } } /// <summary> /// 产品类2 /// </summary> public class Collision : IAutoInsurance { public static string getInsurInfo() { return "collision"; } } }
简单工厂方法模式的有点如下:
1.工厂方法包含从一个类的结构中选择初始类的业务逻辑。
2.客户类不直接创建产品的对象,客户类只作为对象的消费者。
3.简单工厂方法模式实现了责任分离。
4.客户类不负有创建类的对象责任,因此如果有新产品子类加入,不必修改已有的客户类代码(前提是客户类暂时不需要使用新的产品子类对象。)
5.因为工厂类中包含了对象生成的必要逻辑判断,根据客户端的选择条件对台实例化相关的类,所以客户端类中没有创建对象所需要的条件语句。
简单工厂方法模式的缺点如下:
1.由于工厂类必须知道怎么创建每个子类的对象,所以每当增加产品的类时候,都需要修改工厂方法,简单工厂方法模式不符合开闭原则。
2.因为工厂类的工厂方法是讲台的,所以工厂类中的方法不能被继承,简单工厂类只能是有一个单独的类,而不能成为一个层次的类。
相关文章推荐
- 项目经理排期的几个tip
- Struct2中自定义的Filter无效
- 【笔试题】并查集实现
- linux更换主板后无法启动网卡
- zend studio 设置成psr2规范
- 闪传“一键换机”帮你快速转移手机数据
- log4j日志异步化大幅提升系统性能
- linux安装mariaDB
- 图解 Android 事件分发机制
- MySQL参考手册
- 浅谈cookie机制
- TCP 的那些事儿(下)
- 策划要如何评价一款游戏系统:游戏系统评分标准
- websql使用实例
- hive内部表、外部表
- C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别
- Windows驱动开发(10) - 驱动程序的同步处理(一)
- Apache Shiro 快速入门教程,shiro 基础教程
- anaconda 中包的更新和安装
- 装饰模式(Decorator)