-
抽象工厂模式
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类;在工厂抽象类中有多个产品接口创建对象获取方法,功能更强大,扩展性更好;是工厂方法模式的进一步延伸;
-
适用性
1)一个系统要独立于它的产品的创建、组合和表示时。
2)一个系统要由多个产品系列中的一个来配置时。
3)当你提供一个产品类库,而只想显示它们的接口而不是实现时。
4)当你要强调一系列相关的产品对象的设计以便进行联合使用时。 -
举例
如跑车工厂可以生产各种品牌的跑车,卡车工厂可是生产各种品牌的卡车,这样的多种工厂可以抽象出一个抽象工厂。
-
UML类图
-
代码示例
- 定义哈佛汽车接口(或抽象类)
package com.jin.demo.DesignPatterns.Factory.AbstractFactory; /** * 定义哈佛汽车接口(或抽象类) * @auther jinsx * @date 2019-05-15 08:58 */ public interface HFCar { // 什么汽车都可以跑 void run(); }
- 哈佛跑车
package com.jin.demo.DesignPatterns.Factory.AbstractFactory; /** * 哈佛跑车 * @auther jinsx * @date 2019-05-15 09:00 */ public class HFRoadster implements HFCar{ @Override public void run() { System.out.println("哈佛小跑车,起步就是快"); } }
- 哈佛卡车
package com.jin.demo.DesignPatterns.Factory.AbstractFactory; /** * 哈佛卡车 * @auther jinsx * @date 2019-05-15 09:03 */ public class HFTruck implements HFCar { @Override public void run() { System.out.println("哈佛小卡车,运输能力就是强"); } }
- 定义传奇汽车接口(或抽象类)
package com.jin.demo.DesignPatterns.Factory.AbstractFactory; /** * 定义传奇汽车接口(或抽象类) * @auther jinsx * @date 2019-05-15 08:58 */ public interface CQCar { // 什么汽车都可以跑 void run(); }
- 传奇跑车
package com.jin.demo.DesignPatterns.Factory.AbstractFactory; /** * 传奇跑车 * @auther jinsx * @date 2019-05-15 09:00 */ public class CQRoadster implements CQCar { @Override public void run() { System.out.println("传奇小跑车,起步2.5秒百速"); } }
- 传奇卡车
package com.jin.demo.DesignPatterns.Factory.AbstractFactory; /** * 传奇卡车 * @auther jinsx * @date 2019-05-15 09:03 */ public class CQTruck implements CQCar { @Override public void run() { System.out.println("传奇小卡车,俗称小铁牛"); } }
- 声明抽象工厂接口(或抽象类)
package com.jin.demo.DesignPatterns.Factory.AbstractFactory; /** * 工厂方法接口(或抽象类) * @auther jinsx * @date 2019-05-15 10:00 */ public interface CarAbstrackFactory { HFCar createHFCar(); CQCar createCQCar(); }
- 跑车工厂
package com.jin.demo.DesignPatterns.Factory.AbstractFactory; /** * 跑车工厂 * @auther jinsx * @date 2019-05-15 10:02 */ public class RoadsterFactory implements CarAbstrackFactory { // 哈佛跑车 @Override public HFCar createHFCar() { return new HFRoadster(); } // 传奇跑车 @Override public CQCar createCQCar() { return new CQRoadster(); } }
- 卡车工厂
package com.jin.demo.DesignPatterns.Factory.AbstractFactory; /** * 卡车工厂 * @auther jinsx * @date 2019-05-15 10:05 */ public class TruckFactory implements CarAbstrackFactory { // 哈佛卡车 @Override public HFCar createHFCar() { return new HFTruck(); } // 传奇卡车 @Override public CQCar createCQCar() { return new CQTruck(); } }
- 测试类
package com.jin.demo.DesignPatterns.Factory.AbstractFactory; /** * 测试类 * @auther jinsx * @date 2019-05-15 10:51 */ public class TestAbstrackFactory { public static void main(String[] args) { // 来一个小跑 CarAbstrackFactory r = new RoadsterFactory(); HFCar rCar = r.createHFCar(); rCar.run(); CQCar cqCar = r.createCQCar(); cqCar.run(); // 来一个小卡 CarAbstrackFactory t = new TruckFactory(); HFCar tCar = t.createHFCar(); tCar.run(); CQCar cqCar1 = t.createCQCar(); cqCar1.run(); } }
- 执行测试结果
哈佛小跑车,起步就是快 传奇小跑车,起步2.5秒百速 哈佛小卡车,运输能力就是强 传奇小卡车,俗称小铁牛
- 定义哈佛汽车接口(或抽象类)
-
点击Java之23种设计模式查看更多的设计模式