简介:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类
目的:简单工厂的扩展
总结:简单工厂中,抽象工厂接口创建抽象产品的方法,和抽象产品从一个变成多个
1,首先从简单工厂进化到工厂方法,是因为工厂方法弥补了简单工厂对修改开放的弊端,即简单工厂违背了开闭原则。
2,从工厂方法进化到抽象工厂,是因为抽象工厂弥补了工厂方法只能创造一个系列的产品的弊端。
组成:工厂接口, 工厂接口实现类, 具体产品的接口, 产品实现类
一,工厂接口
package com.design.e.factory.abstrac; /** * 抽象工厂模式 */ public interface CoreFactory { AproductService createAproduct(); BproductService createBproduct(); }
二,工厂接口实现类
package com.design.e.factory.abstrac; /** * 指定产品的具体工厂 */ public class Machine1Factory implements CoreFactory { @Override public AproductService createAproduct() { return new ProductA1(); } @Override public BproductService createBproduct() { return new ProductB1(); } }
package com.design.e.factory.abstrac; /** * 指定产品的具体工厂 */ public class Machine2Factory implements CoreFactory { @Override public AproductService createAproduct() { return new ProductA2(); } @Override public BproductService createBproduct() { return new ProductB2(); } }
三,具体产品接口
package com.design.e.factory.abstrac; /** * 抽象A产品接口 */ public interface AproductService { void create(); }
package com.design.e.factory.abstrac; /** * 抽象B产品接口 */ public interface BproductService { void create(); }
四,具体产品实现
package com.design.e.factory.abstrac; /** * 具体产品 */ public class ProductA1 implements AproductService { @Override public void create() { System.out.println(" 生产A类别--A1型号"); } }
package com.design.e.factory.abstrac; /** * 具体产品 */ public class ProductA2 implements AproductService { @Override public void create() { System.out.println(" 生产A类别--A2型号"); } }
package com.design.e.factory.abstrac; /** * 具体产品 */ public class ProductB1 implements BproductService { @Override public void create() { System.out.println(" 生产B类别--B1型号"); } }
package com.design.e.factory.abstrac; /** * 具体产品 */ public class ProductB2 implements BproductService { @Override public void create() { System.out.println(" 生产B类别--B2型号"); } }
Main:
package com.design.e.factory.abstrac; /** * 抽象工厂模式 * * 抽象工厂,抽象产品 * * 1,首先从简单工厂进化到工厂方法,是因为工厂方法弥补了简单工厂对修改开放的弊端,即简单工厂违背了开闭原则。 * 2,从工厂方法进化到抽象工厂,是因为抽象工厂弥补了工厂方法只能创造一个系列的产品的弊端。 */ public class MainTest { public static void main(String[] args) { CoreFactory machineFactory = new Machine1Factory(); AproductService productA = machineFactory.createAproduct(); productA.create(); BproductService productB = machineFactory.createBproduct(); productB.create(); machineFactory = new Machine2Factory(); productA = machineFactory.createAproduct(); productA.create(); productB = machineFactory.createBproduct(); productB.create(); } }
Result:
生产A类别--A1型号 生产B类别--B1型号 生产A类别--A2型号 生产B类别--B2型号