//定义工厂抽象类 abstract class Factory{ //能生产汽车 public abstract Car getCar(); //也能生产轮船 public abstract Car getShip(); }
增加轮船的抽象类
//定义轮船的抽象类 abstract class Ship{ public abstract void getType(); }
定义三种轮船
//定义三种轮船 class ShipA extends Ship{ @Override public void getType() { System.out.println("A型号轮船"); } } class ShipB extends Ship{ @Override public void getType() { System.out.println("B型号轮船"); } } class ShipC extends Ship{ @Override public void getType() { System.out.println("C型号轮船"); } }
三种工厂还要增加获取轮船的方法
//定义三种工厂 class FactoryA extends Factory{ @Override public Car getCar() { return new CarA(); } @Override public Car getShip() { return new ShipA(); } } class FactoryB extends Factory{ @Override public Car getCar() { return new CarB(); } @Override public Car getShip() { return new ShipB(); } } class FactoryC extends Factory{ @Override public Car getCar() { return new CarC(); } @Override public Car getShip() { return new ShipC(); } }
测试
public class AbstractFactoryTest { public static void main(String[] args) { //需要汽车 Factory factoryB = new FactoryB(); Car car = factoryB.getCar(); car.getType(); //需要轮船 Factory factoryC = new FactoryC(); Ship ship = factoryC.getShip(); ship.getType(); } }
在之前只需要生产汽车的时候,工厂方法模式就很好的解决了问题, 之后增加了需求,也需要轮船了,那么此时工厂既能生产汽车,也能生产轮船 就升级为抽象工厂模式,解决了不同族类型的问题
汽车是一个族,轮船是一个族,汽车和轮船不是同一个族
工厂方法解决了同族商品不同型号的问题 抽象工厂解决了不同族商品不同型号的问题