java设计模式之二抽象工厂模式(Abstract Factory)

工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。因为抽象工厂不太好理解,我们先看看图,然后就和代码,就比较容易理解。

 1 package com.qcf.test2;
 2 /**
 3  * 抽象工厂模式
 4  * 为方法创建一个接口
 5  * 为工厂类创建一个接口
 6  * 如果再增加一辆车那就再创建一个方法类继承Car,创建一个factory继承Factory
 7  * @author Computer
 8  *
 9  */
10 public class AbstractFactory {
11     public static void main(String[] args) {
12         Car car=new BigCarFactory().product();
13         car.getName();
14     }
15 }
16 /**
17  * 工厂类接口
18  * @author Computer
19  *
20  */
21 interface Factory{
22     Car product();
23 }
24 /**
25  * Bmw工厂生产类
26  * @author Computer
27  *
28  */
29  class BmwCarFactory implements Factory{
30 
31     @Override
32     public Car product() {
33         return new Bmw();
34     }
35  }
36 
37  /**
38   * Big工厂生产类
39   * @author Computer
40   *
41   */
42   class BigCarFactory implements Factory{
43 
44      @Override
45      public Car product() {
46          return new BigCar();
47      }
48 }
49 
50 /**
51  * 接口
52  * @author Computer
53  *
54  */
55 interface Car{
56     void getName();    
57 }
58 /**
59  * 实现接口的子类
60  * @author Computer
61  *
62  */
63 class Bmw implements Car{
64     @Override
65     public void getName() {
66         System.out.println("BMW  Car....");
67     }
68 }
69 /**
70  * 实现接口的子类
71  * @author Computer
72  *
73  */ 
74 class BigCar implements Car{
75     @Override
76     public void getName() {
77         System.out.println("Big Car...");
78     }
79 }
View Code
原文地址:https://www.cnblogs.com/quchengfeng/p/4308833.html