抽象工厂模式的概念
定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。
意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
抽象工厂模式的类图:
(1)生产奔驰的接口Benz:
package com.ssy.wlj.abstractfactory; /** * 奔驰产品的抽象接口 * @author Administrator * @since 2019/05/25 * */ public interface Benz { void carColor();//设置颜色 void carSpeed();//设置速度 void carPrice();//设置价格 }
(2)生产车辆导航仪的接口类:
package com.ssy.wlj.abstractfactory; /** * 车辆导航仪的抽象产品接口类 * @author Administrator * @since 2019/05/25 * */ public interface CarNavigator { void navigatorColor();//导航仪的颜色 void navigatorPrice();//导航仪的价格 }
(3)奔驰工厂的抽象接口类BanzFactory:
package com.ssy.wlj.abstractfactory; /** * 奔驰工厂的抽象接口 * @author Administrator * @since 2019/05/25 * */ public interface BanzFactory { //创建奔驰的方法 Benz createCar(); //创建导航仪的方法 CarNavigator createNacigator(); }
(4)生产奔驰车辆C180和相关导航仪的具体工厂类:
package com.ssy.wlj.abstractfactory; public class C180Factory implements BanzFactory { @Override public Benz createCar() { return new BenzC180(); } @Override public CarNavigator createNacigator() { return new C180Navigator(); } }
(5)生产奔驰车辆Z260和相关导航仪的具体工厂类:
package com.ssy.wlj.abstractfactory; public class E260Factory implements BanzFactory { @Override public Benz createCar() { return new BenzE260(); } @Override public CarNavigator createNacigator() { return new E260Navigator(); } }
(6)生产奔驰车辆C180的具体产品类:
package com.ssy.wlj.abstractfactory; /** * 奔驰C180的生产的具体类 * @author Administrator * @since 2019/05/25 * */ public class BenzC180 implements Benz { public BenzC180() { carColor(); carPrice(); carSpeed(); } @Override public void carColor() { System.out.println("奔驰C180的颜色是银白色"); } @Override public void carSpeed() { System.out.println("奔驰C180的速度是200公里每小时"); } @Override public void carPrice() { System.out.println("奔驰C180的价格是100万"); } }
(7)生产奔驰车辆C180对应导航仪的具体产品类:
package com.ssy.wlj.abstractfactory; public class C180Navigator implements CarNavigator { C180Navigator(){ navigatorColor(); navigatorPrice(); } @Override public void navigatorColor() { System.out.println("汽车C180的导航仪颜色:黑色"); } @Override public void navigatorPrice() { System.out.println("汽车C180的导航仪价格:480元"); } }
(8)生产奔驰车辆E260的具体产品类:
package com.ssy.wlj.abstractfactory; /** * 奔驰E260的生产的具体类 * @author Administrator * */ public class BenzE260 implements Benz { public BenzE260() { carColor(); carPrice(); carSpeed(); } @Override public void carColor() { System.out.println("奔驰E260的颜色是银白色"); } @Override public void carSpeed() { System.out.println("奔驰E260的速度是200公里每小时"); } @Override public void carPrice() { System.out.println("奔驰E260的价格是100万"); } }
(7)生产奔驰车辆E260对应导航仪的具体产品类:
package com.ssy.wlj.abstractfactory; public class E260Navigator implements CarNavigator { E260Navigator(){ navigatorColor(); navigatorPrice(); } @Override public void navigatorColor() { System.out.println("汽车E260的导航仪颜色:白色"); } @Override public void navigatorPrice() { System.out.println("汽车E260的导航仪价格:880元"); } }
客户端调用:
package com.ssy.wlj.abstractfactory; public class Client { public static void main(String[] a) { System.out.println("生产奔驰车C180"); //父类但对象子类的实例 BanzFactory banzFactory = new C180Factory();//创建一个C180工厂 //调用父类的方法,这就是java多态的一种体现 banzFactory.createCar();//C180工厂生产车辆C180 banzFactory.createNacigator();//生产车辆C180对应的导航仪 System.out.println("========================================="); System.out.println("生产奔驰车Z260"); BanzFactory banzFactory2 = new E260Factory(); banzFactory2.createCar();//E260工厂生产车辆E260 banzFactory2.createNacigator();//生产车辆E260对应的导航仪 } }