1:实例
某客户想要购买一辆车,他要联系4S店,首先得有4S店(抽象工厂)的电话。
客户上网查询(建造工厂),发现了宝马4S店(具体工厂)的电话和奔驰4S店(具体工厂)的电话。
客户拨通了宝马4S店的电话(获取具体工厂),发现目前店里可以提供(生产)多款车型(具体产品)供
客户选择(BMW 320、BMW 530,BMW 740)。
客户拨通了奔驰4S店的电话(获取具体工厂),发现目前店里可以提供(生产)多款车型(具体产品)供
客户选择(BenzC200、BenzE300)。
代码实现:
1:车的最高级抽象
package AbstractFactory; /** * 作用:最高级抽象产品,用于抽象工厂的建造方法的返回值 */ public abstract class Car { abstract void drive(); }
2:宝马车的抽象和实现
package AbstractFactory; /** * 作用:宝马产品的产品类 */ public abstract class BMWCar extends Car{ } //宝马BMW320的具体实现 class BMW320 extends BMWCar{ @Override void drive() { System.out.println("BMW320,老板专用。"); } } //宝马BMW530的具体实现 class BMW530 extends BMWCar { public void drive() { System.out.println("BMW530,时不我待。"); } }
3:奔驰车的抽象和实现
package AbstractFactory; /** * 作用:奔驰汽车的产品类 */ public abstract class BenzCar extends Car { } //奔驰C200的具体实现 class BenzC200 extends BenzCar { public void drive() { System.out.println("BenzC200,实惠有面"); } } //奔驰E300的具体实现 class BenzE300 extends BenzCar { public void drive() { System.out.println("BenzE300,商务气派"); } }
4:抽象工厂,宝马工厂和奔驰车厂来实现它
package AbstractFactory; /** * 作用:抽象工厂类 */ public abstract class AbstractFactory { public abstract Car getCar(String type) throws ClassNotFoundException, IllegalAccessException, InstantiationException; } //宝马工厂,生产所有的宝马类型 class BMWFactory extends AbstractFactory{ @Override public Car getCar(String type) throws ClassNotFoundException, IllegalAccessException, InstantiationException { Class<?> aClass = Class.forName(type); return (BMWCar) aClass.newInstance(); } } //奔驰工厂,生产所有的奔驰 class BenzFactory extends AbstractFactory{ @Override public Car getCar(String type) throws ClassNotFoundException, IllegalAccessException, InstantiationException { Class<?> aClass = Class.forName(type); return (BenzCar) aClass.newInstance(); } }
5:超级工厂,建造工厂的工厂
package AbstractFactory; /** * 作用:超级工厂类,建造工厂的工厂 */ public class FactoryProducer { public static AbstractFactory getFactory(String type) throws IllegalAccessException, InstantiationException, ClassNotFoundException { Class cl = Class.forName(type); System.out.println("创建工厂:"+type); return (AbstractFactory)cl.newInstance(); } }
6:测试
package AbstractFactory; /** * 作用: */ public class Demo { public static void main(String[] args) throws Exception{ //超级工厂去创建生产宝马的工厂 AbstractFactory bmwFactory = FactoryProducer.getFactory("AbstractFactory.BMWFactory"); //宝马工厂去生产具体的宝马类型 bmwFactory.getCar("AbstractFactory.BMW320").drive(); //超级工厂去创建生产宝马的工厂 AbstractFactory benzFactory = FactoryProducer.getFactory("AbstractFactory.BenzFactory"); //宝马工厂去生产具体的宝马类型 benzFactory.getCar("AbstractFactory.BenzC200").drive(); } }