1.简介
-
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
-
在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。
2.场景
- 服装店中的衣服,比如说有商务装(成套,一系列具体产品)、时尚装(成套,一系列具体产品),甚至可能有商务女装、商务男装、时尚女装、时尚男装,这些也都是成套的,即一系列具体产品。假设 某一个衣柜(具体工厂)只能存放某一种这样的衣服(成套,一系列具体产品),每次拿这种成套的衣服时也自然要从这个衣柜中取出了。所有的衣柜(具体工厂)都是衣柜类的(抽象工厂)某一个,而每一件成套的衣服又包括具体的上衣(某一具体产品),裤子(某一具体产品),这些具体的上衣其实也都是上衣(抽象产品),具体的裤子也都是裤子(另一个抽象产品)。
- 数据库(抽象工厂),下面有mysql,oracle(具体工厂),抽象工厂生产user,dept(抽象产品)两种,mysql具体工厂生产m-user和m-dept两种具体产品,oracle具体工厂生产o-user和o-dept两种具体产品。以后如果需要用mysql数据库,那么就生产mysql工厂生产的产品。
- 抽象工厂模式也就是不仅生产鼠标,同时生产键盘。也就是 PC 厂商是个父类,有生产鼠标,生产键盘两个接口。戴尔工厂,惠普工厂继承它,可以分别生产戴尔鼠标+戴尔键盘,和惠普鼠标+惠普键盘。创建工厂时,由戴尔工厂创建。后续工厂.生产鼠标()则生产戴尔鼠标,工厂.生产键盘()则生产戴尔键盘。
1530601916-7298-DP-AbstractFactory.png3. 抽象工厂模式模型图
image.png4. 抽象工厂模式代码实现
image.png
image.png
image.png image.png
image.png
image.png image.png
image.png
5. 抽象工厂模式和工厂方法模式区分
只有一个user类和user操作类的时候,是需要工厂方法模式,如果加上dept等等,就形成了抽象工厂方法模式。
网友评论