浅谈设计模式之简单工厂模式、工厂模式、抽象工厂模式

来源:互联网 发布:php.ini session 设置 编辑:程序博客网 时间:2024/06/15 08:12

简单工厂,工厂方法,抽象工厂都属于设计模式中的创建型模式。其主要功能都是帮助我们把对象的实例化部分抽取了出来,优化了系统的架构,并且增强了系统的扩展性。

简单工厂模式,该设计模式的特点是:第一,在一个模块内可以创建多种实例;第二,实例在创建之前要通过传入的参数进行逻辑判断,比如与switch语句的结合;第三,对于新增加一个产品,需要对模块内部的逻辑判断重新拓展一遍。
这里写图片描述

工厂模式定义了一个用于创建对象的接口,让子类决定实例化哪一个类。工厂模式使一个类的实例化延迟到其子类。该模式的特点是:第一,具体的创建实例操作在具体划分的子类中执行;第二,拓展性好,不会对已有模块产生影响。
这里写图片描述

工厂模式是简单工厂模式的进一步抽象和推广。将简单工厂的类抽象出一个接口和多个生成工厂的类就变成了工厂模式。由于使用了多态性,工厂模式保持了简单工厂封装对象创建过程的优点,而且克服了它违背开放-封闭原则的缺点。但缺点是每增加一个产品,就需要增加一个额外的安贫工厂工厂的类,增加了开发量。

【开放-封闭原则:对于扩展开放,对于更改封闭,就是需求修改的时候扩展功能而不是直接修改原有的功能】

抽象工厂模式,提供一个创建一系列相关或相互依赖的接口,而无需指定他们具体的类。这种设计模式是应对产品族概念而生的,一般用于有产品族的情况下,但拓展性不好,有时结合简单工厂能避免这个问题。
这里写图片描述

另外,所有在用简单工厂的地方,都可以考虑用反射技术来去除switch或者if,解除分之判断带来的耦合。对于反射射个人认为,就是得到程序集中的属性和方法并加以引用,但这种引用可以使用字符串的方式,可以类比于Invoke函数的使用。

反射的应用:
using System.Reflection;
Assembly.Load(“程序集名称”).CreateInstance(“命名空间.类名称”);

参考书籍:《大话数据结构》
参考网站:将计算机思维故事化——之设计模式简单工厂、工厂模式及抽象工厂

0 1