## 1. 定义
>抽象工厂模式是一个超级工厂,用来创建其他工厂。 这个工厂也被称为工厂的工厂。
## 2. 场景
>如果需要创建的子类越来越多,不止只有手机,还有ipad、电脑什么的,难道每一个子类都要对应一个工厂类吗?
解决上述问题的办法是可以用抽象工厂模式
## 3. 重构工厂方法的代码
结构变化如下:
![](https://img.kancloud.cn/67/80/6780af2599c4450fb215cf5c807aab92_796x263.png)
**`phone包下代码:`**
~~~
public interface IPhone {
void packaging();
}
public class HWPhone implements IPhone {
@Override
public void packaging() {
System.out.println("华为手机");
}
}
public class MIPhone implements IPhone {
@Override
public void packaging() {
System.out.println("小米手机");
}
}
~~~
**`ipad包下代码:`**
~~~
public interface Ipad {
void packaging();
}
public class HWpad implements Ipad {
@Override
public void packaging() {
System.out.println("华为ipad");
}
}
public class MIpad implements Ipad {
@Override
public void packaging() {
System.out.println("小米ipad");
}
}
~~~
**`factory包下代码:`**
~~~
public interface IFactory {
IPhone packaging1();
Ipad packaging2();
}
public class Factory implements IFactory {
@Override
public IPhone packaging1() {
return new HWPhone();
}
@Override
public Ipad packaging2() {
return new HWpad();
}
}
~~~
**`测试类代码:`**
~~~
public class TestClient {
public static void main(String[] args) {
IFactory factory = new Factory();
factory.packaging1().packaging();
factory.packaging2().packaging();
}
}
~~~
## 4. 总结
>当需要创建的对象是一系列相互关联或相互依赖的产品族时,便可以使用抽象工厂模式。说的更明白一点,就是一个继承体系中,如果存在着多个等级结构(即存在着多个抽象类),并且分属各个等级结构中的实现类之间存在着一定的关联或者约束,就可以使用抽象工厂模式。假如各个等级结构中的实现类之间不存在关联或约束,则使用多个独立的工厂来对产品进行创建,则更合适一点。
- 前言
- 第一章 设计七大原则
- 第1节 开闭原则
- 第2节 依赖倒置原则
- 第3节 单一职责原则
- 第4节 接口隔离原则
- 第5节 迪米特法则
- 第6节 里氏替换原则
- 第7节 合成复用原则
- 第二章 简单工厂模式
- 第1节 使用场景
- 第2节 示例代码
- 第三章 创建者模式
- 第1节 工厂方法模式
- 第2节 抽象工厂模式
- 第3节 建造者模式
- 第4节 原型模式
- 第5节 单例模式
- 第四章 结构型模式
- 第1节 适配器模式
- 第2节 桥接模式
- 第3节 组合模式
- 第4节 装饰者模式
- 第5节 外观模式
- 第6节 享元模式
- 第7节 代理模式
- 第五章 行为模式
- 第1节 责任链模式
- 第2节 命令模式
- 第3节 迭代器模式
- 第4节 中介者模式
- 第5节 备忘录模式
- 第6节 观察者模式
- 第7节 状态模式
- 第8节 策略模式
- 第9节 模板方法模式
- 第10节 访问者模式
- 第11节 解释器模式