工厂设计模式
在类图中,方法前的 M 和 F 标记表示方法的可见性。
M/+ 代表 public 方法,即可以从类的外部访问。
F/ 代表 private 方法,即只能在类的内部访问。
P/# 代表protect方法,其所在类的子类或者同一个包中的其他类访问,而不能被类的外部直接访问
工厂模式:--------------典型解耦模式
1.将实例化封装起来,调用者无需关心实例化过程,依赖工厂即可得到产品
2.关心接口,不需要关心实现的变化
3.产品类实例化依赖很多类,而调用者无需知道这些类
4.实例化产品由实现类完成,扩展性好
简单工厂 : 使用一个工厂对象用来生产同一等级结构中的任意产品。(不支持拓展增加产品)

优点:
很明显,简单工厂的特点就是“简单粗暴”,通过一个含参的工厂方法,我们可以实例化任何产品类,上至飞机火箭,下至土豆面条,无所不能。
所以简单工厂有一个别名:上帝类。
缺点:
任何”东西“的子类都可以被生产,负担太重。当所要生产产品种类非常多时,工厂方法的代码量可能会很庞大。
在遵循开闭原则(对拓展开放,对修改关闭)的条件下,简单工厂对于增加新的产品,无能为力。因为增加新产品只能通过修改工厂方法来实现。
** 工厂方法 factory method: 使用多个工厂对象用来生产同一等级结构中对应的固定产品。(支持拓展增加产品)**

优点
工厂方法模式就很好的减轻了工厂类的负担,抽象工厂类(抽象类==接口)把某一类/某一种产品交由具体厂类生产;(对应简单工厂的缺点1。
同时增加某一类 ”产品“ 并不需要修改工厂类,只需要添加生产这类 ”产品“ 具体工厂类即可,使得工厂类符合开放-封闭原则。
缺点
对于某些可以形成产品族(一组产品)的情况处理比较复杂
抽象工厂 : 使用一组抽象工厂接口,每个接口负责创建一组相关的产品对象。客户端通过使用不同的工厂接口来创建不同类型和风格的对象。(不支持拓展增加产品;支持增加产品族)

优点:在抽象工厂模式中,具体工厂子类实现了抽象工厂接口,负责创建一类产品对象。而抽象产品接口单独存在,每个接口定义了一类产品的行为。具体产品类则实现了相应的抽象产品接口,负责具体的产品实现。这样,每个具体工厂类负责创建一组相关的产品对象,而抽象产品接口与具体工厂类组合,用于表示工厂可以生产的产品范围。
缺点:产品族是客户端面临的选择,通常是一组固定的相关产品。这意味着客户端在使用抽象工厂模式时,需要从一组固定的产品族中进行选择,而无法混合不同产品族的产品。
举个例子,假设有一个汽车销售商,他们提供两种产品系列:经济型车系列和豪华型车系列。每个系列都包括轿车、卡车、发动机和轮胎等相关产品。客户端在选择汽车时,只能从经济型车系列或豪华型车系列中进行选择,而不能将经济型车的轿车和豪华型车的卡车进行组合。
因此,抽象工厂模式适用于客户端的选择是固定的、有限的情况,客户端只需从预定义的产品族中选择所需的产品即可。
经济型和豪华型是具体的产品类型接口,它们并不对应产品族,而是表示产品族中的每个具体产品类型。
有两个接口,两个产品族。最终组合会出现四种可能结果-----可以将这四种可能的结果称为对象或产品的实现,因为每种情况都对应着一组具体产品的实际创建。

浙公网安备 33010602011771号