工厂模式
客户端不直接接触某个业务类的实现或者实现方法,而是通过工厂类来调度这些业务类的实现或者方法,客户端直接和工厂类接触,调用所需的业务实现
简单工厂
是什么
简单工厂模式(Simple Factory Pattern)是指由一个工厂对象 决定创建出哪一种产品类的实例。
属于创建型模式,但它不属于GOF,23种设计模式。
关键词
接口,违背开闭原则,业务不能复杂
适用场景
工厂类负责创建的对象较少
客户端只需要传入工厂类的参数,对于如何创建对象的逻辑不需要关心。
优缺点
只需要传入一个正确的参数,就可以获取所需对象,不需知道创建细节。
工厂类的职责过重,增加新的产品需要修改工厂类的判断逻辑,违背开闭原则, 不易于扩展过于复杂的产品结构
自己理解
通过if else 或者switch 的方式实现某些业务实现的调度,适用业务类较少的场景,如果业务类过多,工厂类会变得冗余复杂,违背开闭原则,单一职责原则
工厂方法
是什么
工厂方法模式(Fatory Method Pattern)是指定义一个创建对 象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方 法让类的实例化推迟到子类中进行。
属于创建型设计模式
关键词
遵循开闭原则,单一职责 ,易于扩展
适用场景
创建对象需要大量重复的代码
优缺点
用户只需关心所需产品对应的工厂,无需关心创建的细节。加入新产品符合开闭原则,提高了系统的可扩展性
类的个数容易过多,增加了代码结构的复杂度。增加了系统的抽象性和理解难度
自己理解
某些业务类,都有其对应的接口,每个业务类都有其对应的工厂类,而这些工厂类都有其对应的接口
每个具体工厂类只能创建一个具体产品类的实例
抽象工厂方法
是什么
抽象工厂模式(Abastract Factory Pattern)是指提供一个创建 一系列相关或相互依赖对象的接口,无须指定他们具体的类。
属于创建型设计模式。
关键词
扩展困难
适用场景
客户端(应用层)不依赖于产品类实例如何被创建,实现等细节。
强调一系列相关的产品对象(属于同一产品族)一起使用创建对象需要大量重复的代码
提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于具体实现
优缺点
具体产品在应用层代码隔离,无须关心创建细节将一个系列的产品族统一到一起创建。
规定了所有可能被创建的产品集合,产品族中扩展新的产品困难, 需要修改抽象工厂的接口。 增加了系统的抽象性和理解难度。
自己理解
可以创建多个抽象工厂类
每个具体工厂类可以创建多个具体产品类的实例。
工厂方法与抽象工厂方法
工厂方法注重一个工厂方法实现一种产品
抽象工厂方法注重某个品牌下的多个产品实现