设计模式笔记之抽象工厂模式的使用

<其它设计模式介绍及案例源码下载 >

简介:抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

主要解决:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

何时使用:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。

优点:当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。

缺点:产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的 Creator 里加代码,又要在具体的里面加代码。

使用场景: 一般用于具有产品树和产品族的场景下,如:QQ 换皮肤,将所有界面相应的节点都进行切换

比较:工厂方法简单工厂模式

例如下:

//抽象产品  
2.abstract class BenzCar{  
3.    private String name;  
4.      
5.    public abstract void drive();  
6.      
7.    public String getName() {  
8.        return name;  
9.    }  
10.    public void setName(String name) {  
11.        this.name = name;  
12.    }  
13.}  
14.//具体产品(Bmw和Audi同理)  
15.class BenzSportCar extends BenzCar{  
16.    public void drive(){  
17.        System.out.println("开奔驰跑车");  
18.    }  
19.}  
20.class BenzBusinessCar extends BenzCar{  
21.    public void drive(){  
22.       System.out.println("开奔驰商务车");
23.    }  
24.}  
25.  
26.abstract class BmwCar{  
27.    private String name;  
28.      
29.    public abstract void drive();  
30.      
31.    public String getName() {  
32.        return name;  
33.    }  
34.    public void setName(String name) {  
35.        this.name = name;  
36.    }  
37.}  
38.class BmwSportCar extends BmwCar{  
39.    public void drive(){  
40.        System.out.println("开宝马跑车");
41.    }  
42.}  
43.class BmwBusinessCar extends BmwCar{  
44.    public void drive(){  
45.        System.out.println("开宝马商务车");  
46.    }  
47.}  
48.  
49.abstract class AudiCar{  
50.    private String name;  
51.      
52.    public abstract void drive();  
53.      
54.    public String getName() {  
55.        return name;  
56.    }  
57.    public void setName(String name) {  
58.        this.name = name;  
59.    }  
60.}  
61.class AudiSportCar extends AudiCar{  
62.    public void drive(){  
63.        System.out.println("开奥迪跑车");
64.    }  
65.}  
66.class AudiBusinessCar extends AudiCar{  
67.    public void drive(){  
68.        System.out.println("开奥迪商务车");
69.    }  
70.}  
71.  
72.  
73.//抽象工厂  
74.abstract class Driver{  
75.    public abstract BenzCar createBenzCar(String car) throws Exception;  
76.      
77.    public abstract BmwCar createBmwCar(String car) throws Exception;  
78.      
79.    public abstract AudiCar createAudiCar(String car) throws Exception;  
80.}  
81.//具体工厂  
82.class SportDriver extends Driver{  
83.    public BenzCar createBenzCar(String car) throws Exception {  
84.        return new BenzSportCar();  
85.    }  
86.    public BmwCar createBmwCar(String car) throws Exception {  
87.        return new BmwSportCar();  
88.    }  
89.    public AudiCar createAudiCar(String car) throws Exception {  
90.        return new AudiSportCar();  
91.    }  
92.}  
93.class BusinessDriver extends Driver{  
94.    public BenzCar createBenzCar(String car) throws Exception {  
95.        return new BenzBusinessCar();  
96.    }  
97.    public BmwCar createBmwCar(String car) throws Exception {  
98.        return new BmwBusinessCar();  
99.    }  
100.    public AudiCar createAudiCar(String car) throws Exception {  
101.        return new AudiBusinessCar();  
102.    }  
103.}  
104.  
105.//老板  
106.public class BossAbstractFactory {  
107.  
108.    public static void main(String[] args) throws Exception {  
109.          
110.        Driver d = new BusinessDriver();  
111.        AudiCar car = d.createAudiCar("");  
112.        car.drive();  
113.    }  
114.}  

猜你喜欢

转载自blog.csdn.net/fsy9595887/article/details/84327787