简单工厂
起因: 为了解决客户程序对具体类型(经常快速变化)的依赖,将延迟New()动作到子类,中间加入另外一个对象(抽象对象)做桥梁, 将依赖转向到它的上面. 这就是工厂模式--简单的工厂
简单工厂的缺点:如果抽象工厂使用的频率小,易造成资源浪费.
解决这个问题三个方法:
将工厂实例做参数,传入具体的方法中.
采用单体模式, 生成一个实例系统就不再生成第二个, 所有的客户端都共享这个实例.
使用静态类, 根据提供的目标类型选择需要实例化的类型.
上面简单的工厂局限:
客户端虽然没有跟具体类型和方法耦合,当它还是跟具体的工厂耦合.所以还需要将其与具体工厂解耦.
工厂方法
方法:抽象一系列具有统一通用工厂方法的实体工厂为抽象工厂
它解决无法预知生产环境中实际需要创建的具体类型
客户端如何跟工厂连接起来----通过装配或程序的配置文件(传递参数)
批量工厂
上面的方法都是单件生产模式,
要批量生产,
工厂首先应具有返回具体类型实例的聚合的能力(产品类型容器)
怎样生产,用哪个工厂生产则需要生产指导(Director)
生产什么,则需要生产指导制定的决策(Decision)
采用泛型的Generic Factory
采用泛型抽象工厂,抽象工厂的方法(也就是工厂生成的类型采用泛型),---- 保证工厂类型的加工过程的通用性(内层抽象算法描述).
委托工厂类型
对具体实行方法的抽象,也就是委托的参数和具体方法的参数相同时,他们之间建立委托关系,客户端执行方法和事件时就无法考虑具体方法,由委托去处理.
注释:来源于<设计模式--基于C#的工程化实现及扩展>,作者:王翔