抽象工厂模式 Abstract Factory Pattern
Provide an interface for creating families of related or dependent objects without specifying their concrete classes.
为创建一组相关或相互依赖的对象提供一个接口,并且无须指定他们的详细类。
抽象工厂角色(Abstract Factory):该角色是抽象工厂模式的核心,与应用系统无关。不论什么创建对象的工厂类必须实现这个接口。
package com.DesignPattern.Creational.AbstractFactory; public interface AbstractFactory { //创建产品A public ProductA factoryA(); //创建产品B public ProductB factoryB(); }
详细工厂角色(Concrete Factory):该角色实现了抽象工厂接口,含有选择合适的产品的逻辑,而且受到应用程序的调用以创建产品对象。
package com.DesignPattern.Creational.AbstractFactory; public class ConcreteFactory1 implements AbstractFactory{ //创建等级为1的产品A @Override public ProductA factoryA() { return new ProductA1(); } //创建等级为1的产品B @Override public ProductB factoryB() { return new ProductB1(); } }
package com.DesignPattern.Creational.AbstractFactory; public class ConcreteFactory2 implements AbstractFactory { ////创建等级为2的产品A @Override public ProductA factoryA() { return new ProductA2(); } ////创建等级为2的产品B @Override public ProductB factoryB() { return new ProductB2(); } }
抽象产品角色(Abstract Product):该角色负责定义产品的共性,实现对产品最抽象的定义。
package com.DesignPattern.Creational.AbstractFactory; public interface ProductA { //产品A的公共方法 public void method1(); public void method2(); }
package com.DesignPattern.Creational.AbstractFactory; public interface ProductB { //产品B的公共方法 public void method1(); public void method2(); }
详细产品角色(Concrete Product):该角色是实现抽象产品角色所声明的接口,抽象工厂模式所创建的不论什么产品对象都是某个详细产品角色的实例。
package com.DesignPattern.Creational.AbstractFactory; public class ProductA1 implements ProductA { @Override public void method1() { System.out.println("等级为1的产品A的实现方法"); } @Override public void method2() { System.out.println("等级为1的产品A的业务逻辑处理代码"); } }
package com.DesignPattern.Creational.AbstractFactory; public class ProductA2 implements ProductA { @Override public void method1() { System.out.println("等级为2的产品A的实现方法"); } @Override public void method2() { System.out.println("等级为2的产品A的业务逻辑处理代码"); } }
package com.DesignPattern.Creational.AbstractFactory; public class ProductB1 implements ProductB { @Override public void method1() { System.out.println("等级为1的产品B的实现方法"); } @Override public void method2() { System.out.println("等级为1的产品B的业务逻辑处理代码"); } }
package com.DesignPattern.Creational.AbstractFactory; public class ProductB2 implements ProductB { @Override public void method1() { System.out.println("等级为2的产品B的实现方法"); } @Override public void method2() { System.out.println("等级为2的产品B的业务逻辑处理代码"); } }
package com.DesignPattern.Creational.AbstractFactory; public class ClientDemo { public static void main(String[] args) { // 定义两个工厂 AbstractFactory factory1 = new ConcreteFactory1(); AbstractFactory factory2 = new ConcreteFactory2(); // 生产等级为1的产品A ProductA a1 = factory1.factoryA(); // 生产等级为1的产品B ProductB b1 = factory1.factoryB(); // 生产等级为2的产品A ProductA a2 = factory2.factoryA(); // 生产等级为2的产品B ProductB b2 = factory2.factoryB(); // 业务处理 a1.method1(); a1.method2(); b1.method1(); a2.method1(); b2.method1(); } }