抽象工厂模式可以向客户端提供一个接口,是的客户端在不必指定产品的具体类型的情况下,创建多个产品族中的产品对象。
抽象工厂(AbstractFactory)角色:担任这个角色的是工厂模式的核心,它是与应用系统的商业逻辑无关的。具体工厂类(Concrete Factory)角色:这个角色直接在客户端的调用下创建产品的实例。抽象产品(Abstract Product)角色:担任这个角色的类是工厂方法模式所创建的对象的父类。具体产品(Concrete Product)角色:抽象工厂模式所创建的任何产品对象都是某一个具体产品的实例。
三. 总结Test.javapublic class Test {public static void main(String[] args) {VehicleFactory elecFactory = new ElecFactory();VehicleFactory oilFactory = new OilFactory();Car elecCar = elecFactory.createCar();Boat elecBoat = elecFactory.createBoat();Car oilCar = oilFactory.createCar();Boat oilBoat = oilFactory.createBoat();elecCar.run();oilCar.run();elecBoat.floatage();oilBoat.floatage();}}测试类,这里VehicleFactory为抽象工厂,ElecFactory和OilFactory为两个抽象方法。Car.javapublic interface Car {//汽车的跑方法public void run();}汽车的抽象类,抽象产品。Boat.javapublic interface Boat {//船的漂浮方法public void floatage();}船的抽象类,抽象产品。ElecCar.javapublic class ElecCar implements Car {@Overridepublic void run() {System.out.println("我是电力车,我很环保");}}电力汽车,具体产品。OilCar.javapublic class OilCar implements Car {@Overridepublic void run() {System.out.println("我是汽油车,我动力很足");}}汽油汽车,具体产品。ElecBoat.javapublic class ElecBoat implements Boat {@Overridepublic void floatage() {System.out.println("我是电力船,我漂起来很慢");}}电力船,抽象产品。OilBoat.javapublic class OilBoat implements Boat {@Overridepublic void floatage() {System.out.println("我是汽油船,我漂起来很快");}}汽油船,具体产品。VehicleFactory.javapublic interface VehicleFactory {public Car createCar();public Boat createBoat();}抽象工厂,生产Car和Boat。ElecFactory.javapublic class ElecFactory implements VehicleFactory {@Overridepublic Car createCar() {return new ElecCar();}@Overridepublic Boat createBoat() {return new ElecBoat();}}电力工厂,具体工厂。OilFactory.javapublic class OilFactory implements VehicleFactory {@Overridepublic Car createCar() {return new OilCar();}@Overridepublic Boat createBoat() {return new OilBoat();}}汽油工厂,具体工厂。
这样就是抽象工厂模式,可以发现如果增加生产的类型,如添加一个太阳能类型,那么很简单,只要新建一个太阳能工厂继承抽象工厂,然后新建一个太阳能汽车和太阳能船即可,但是如果增加一个品种,如增加生产火车,就不太好了。
联系客服