抽象工厂模式

来源:互联网 发布:网上电商系统java 编辑:程序博客网 时间:2024/06/06 13:58

为创建一组相关或相互依赖的对象提供一个接口, 而无须指定它们的具体类

/** *  * 为创建一组相关或相互依赖的对象提供一个接口, * 而无须指定它们的具体类 * 一组对象之间存在相关或相互依赖的关系  * 此处声明A组产品 */public abstract class AbstractProductA {//每个产品通用的方法public void commonMethod(){}//每个产品相同方法, 不同实现public abstract void doSomething();}

/** *  * 为创建一组相关或相互依赖的对象提供一个接口, * 而无须指定它们的具体类 * 一组对象之间存在相关或相互依赖的关系  * 此处声明B组产品 */public abstract class AbstractProductB {//每个产品通用的方法public void commonMethod(){}//每个产品相同方法, 不同实现public abstract void doSomething();}

public class ProductA1 extends AbstractProductA{public void doSomething(){System.out.println("Belong to ProductA1");}}

public class ProductA2 extends AbstractProductA{public void doSomething(){System.out.println("Belong to ProductA2");}}

public class ProductB1 extends AbstractProductB{public void doSomething(){System.out.println("Belong to ProductB1");}}

public class ProductB2 extends AbstractProductB{public void doSomething(){System.out.println("Belong to ProductB2");}}

public abstract class AbstractCreator {//创建A产品家族public abstract AbstractProductA createProductA();//创建B产品家族public abstract AbstractProductB createProductB();}

public class Creator1 extends AbstractCreator {//创建等级为1的A产品@Overridepublic AbstractProductA createProductA() {// TODO Auto-generated method stubreturn new ProductA1();}//创建 等级为1的B产品@Overridepublic AbstractProductB createProductB() {// TODO Auto-generated method stubreturn new ProductB1();}}

//有M个产品等级,就应该有M个实现工厂类//在每个实现工厂中,实现不同产品族的生产任务public class Creator2 extends AbstractCreator {//创建等级为2的A产品@Overridepublic AbstractProductA createProductA() {// TODO Auto-generated method stubreturn new ProductA2();}//创建 等级为2的B产品@Overridepublic AbstractProductB createProductB() {// TODO Auto-generated method stubreturn new ProductB2();}}

public class Client {public static void main(String[] args) {// TODO Auto-generated method stub//定义出两个工厂AbstractCreator creator1 = new Creator1();AbstractCreator creator2 = new Creator2();//生产等级为1的产品AbstractProductA a1 = creator1.createProductA();AbstractProductB b1 = creator1.createProductB();//生产等级为2的产品AbstractProductA a2 = creator2.createProductA();AbstractProductB b2 = creator2.createProductB();}}


0 0