ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 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. 总结 >当需要创建的对象是一系列相互关联或相互依赖的产品族时,便可以使用抽象工厂模式。说的更明白一点,就是一个继承体系中,如果存在着多个等级结构(即存在着多个抽象类),并且分属各个等级结构中的实现类之间存在着一定的关联或者约束,就可以使用抽象工厂模式。假如各个等级结构中的实现类之间不存在关联或约束,则使用多个独立的工厂来对产品进行创建,则更合适一点。