盒子
盒子
文章目录
  1. 工厂模式
    1. 类图
  2. 抽象工厂模式
    1. 类图
  3. 要点
  4. 例子
    1. 简单工厂模式
    2. 工厂模式
    3. 抽象工厂模式
      1. 在抽象工厂模式中,假设我们需要增加一个工厂
      2. 在抽象工厂模式中,假设我们需要增加一个产品

设计模式之工厂模式

工厂模式

工厂模式定义一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类

类图

工厂方法类图

Product是对象接口,ContreteProduct是具体类。我们需要通过工厂来创建它的对象。
Creator 是工厂类的接口。提供创建Product的方法。可以有多个实现类,来创建对象。
ContreteCreator 实现了Creator。用来创建对象。


抽象工厂模式

提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

类图

抽象工厂类图

AbstractProductA 和AbstractProductB 分别代表两个对象家族
AbstractFactory 是工厂类的接口,提供创建对象家族中各个对象的方法。
不同的AbstractFactory实现类,分别创建不同的对象家族


要点

  • 所有的工厂都是用来封装对象的创建
  • 简单工厂,虽然不是真正的设计模式,但仍不失为一个简单方法,可以将客户程序从具体类解耦
  • 工厂方法使用继承,把对象的创建委托给子类,子类实现工厂方法来创建对象
  • 抽象工厂使用对象组合,对象的创建被实现在工厂接口所暴露出来的方法中
  • 所有工厂模式都通过减少应用程序和具体类之间的依赖促进松耦合
  • 工厂方法允许类将实例化延迟到子类进行
  • 抽象工厂创建相关对象家族,而不需要依赖他们的具体类
  • 依赖倒置原则,指导我们避免依赖具体类型,而要尽量依赖抽象
  • 工厂是很有威力的技巧,帮助我们针对抽象编程,而不要针对具体类编程

例子

转载 DesignPattern-工厂模式

简单工厂模式

简单工厂模式不是23种里的一种,简而言之,就是有一个专门生产某个产品的类。
比如下图中的鼠标工厂,专业生产鼠标,给参数0,生产戴尔鼠标,给参数1,生产惠普鼠标。
工厂1

工厂模式

工厂模式也就是鼠标工厂是个父类,有生产鼠标这个接口。
戴尔鼠标工厂,惠普鼠标工厂继承它,可以分别生产戴尔鼠标,惠普鼠标。
生产哪种鼠标不再由参数决定,而是创建鼠标工厂时,由戴尔鼠标工厂创建。
后续直接调用鼠标工厂.生产鼠标()即可
工厂2

抽象工厂模式

抽象工厂模式也就是不仅生产鼠标,同时生产键盘。
也就是PC厂商是个父类,有生产鼠标,生产键盘两个接口。
戴尔工厂,惠普工厂继承它,可以分别生产戴尔鼠标+戴尔键盘,和惠普鼠标+惠普键盘。
创建工厂时,由戴尔工厂创建。
后续工厂.生产鼠标()则生产戴尔鼠标,工厂.生产键盘()则生产戴尔键盘。
工厂3

在抽象工厂模式中,假设我们需要增加一个工厂

假设我们增加华硕工厂,则我们需要增加华硕工厂,和戴尔工厂一样,继承PC厂商。
之后创建华硕鼠标,继承鼠标类。创建华硕键盘,继承键盘类。
即可。
工厂4

在抽象工厂模式中,假设我们需要增加一个产品

假设我们增加耳麦这个产品,则首先我们需要增加耳麦这个父类,再加上戴尔耳麦,惠普耳麦这两个子类。
之后在PC厂商这个父类中,增加生产耳麦的接口。最后在戴尔工厂,惠普工厂这两个类中,分别实现生产戴尔耳麦,惠普耳麦的功能。
以上。
工厂5