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