Loading... ## 前期概念 产品等级结构:产品的继承结构,例如一个抽象类(或接口类)是电视机,其子类(或实现类)是海尔电视机/海信电视机、TCL电视机,则抽象电视机和某一具体品牌电视机之间构成了一个产品等级结构,抽象电视机是父类(或接口),具体品牌电视机是子类(或实现类) 产品族:在抽象工厂模式中,产品族指的是由同一个工厂生产的,位于不同产品等级结构的一组产品,例如海尔电器厂生产的海尔电视机、海尔电冰箱等构成一个产品族。 ---------- ## 定义 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。它是一种对象创建型模式。 它为创建一组对象提供了一种解决方案,与工厂方法模式相比,抽象工厂中的具体工厂不只是创建一种产品,它负责创建一族产品。 ---------- ## UML示例 ![抽象工厂方法](https://s1.ax1x.com/2020/05/21/YHgNhd.png) ---------- ## 代码示例 ### 按钮产品结构 ```java // 按钮接口 public interface Button { public void display(); } // spring 按钮类:具体产品 public class SpringButton implements Button{ public void display() { System.out.println("显示浅绿色按钮"); } } // Summer 按钮类:具体产品 public class SummerButton implements Button{ public void display() { System.out.println("显示浅蓝色按钮"); } } ``` ### 文本框产品结构 ```java // 文本框接口:抽象产品 public interface TextField { public void display(); } // Spring文本框类:具体产品 public class SpringTextField implements TextField{ public void display() { System.out.println("显示绿色文本框"); } } // Summer 文本框类:具体产品 public class SummerTextField implements TextField{ public void display() { System.out.println("显示蓝色文本框"); } } ``` ### 组合框产品结构 ```java // 组合框接口:抽象产品 public interface ComboBox { public void display(); } // Spring 组合框类:具体产品 public class SpringComBox implements ComboBox{ public void display() { System.out.println("显示绿色组合框"); } } // Summer组合框类:具体产品 public class SummerComboBox implements ComboBox{ public void display() { System.out.println("显示蓝色组合框"); } } ``` ### 皮肤工厂 ```java // 界面皮肤工厂接口:抽象工厂 public interface SkinFactory { public Button createButton(); public TextField createTextField(); public ComboBox createComboBox(); } // Spring皮肤工厂:具体工厂 public class SpringSkinFactory implements SkinFactory{ public Button createButton() { return new SpringButton(); } public TextField createTextField() { return new SpringTextField(); } public ComboBox createComboBox() { return new SpringComBox(); } } // Summer皮肤工厂:具体工厂 public class SummerSkinFactory implements SkinFactory{ public Button createButton() { return new SummerButton(); } public TextField createTextField() { return new SummerTextField(); } public ComboBox createComboBox() { return new SummerComboBox(); } } ``` ### 客户端 ```java // 客户端代码 public class SkinClient { public static void main(String[] args) { SkinFactory factory; Button bt; TextField tf; ComboBox cb; factory = new SummerSkinFactory; bt = factory.createButton(); tf = factory.createTextField(); cb = factory.createComboBox(); bt.display(); tf.display(); cb.display(); } } ``` 输出: ``` 显示浅蓝色按钮 显示蓝色文本框 显示蓝色组合框 ``` 最后修改:2020 年 05 月 21 日 11 : 01 AM © 允许规范转载