AbstractFactory.java
package com.java.pattern.abstractfactory;
/**
* 抽象工厂的接口,声明创建抽象产品对象的操作
*/
public interface AbstractFactory {
/**
* 创建抽象产品A的对象
*
* @return
*/
public AbstractProductA createProductA();
/**
* 创建抽象产品B的对象
*
* @return
*/
public AbstractProductB createProductB();
}
package com.java.pattern.abstractfactory;
/**
* 抽象产品A的接口
*
*/
public interface AbstractProductA {
}
package com.java.pattern.abstractfactory;
/**
* 抽象产品B的接口
*
*/
public interface AbstractProductB {
}
package com.java.pattern.abstractfactory;
/**
* 产品A的具体实现
*/
public class ProductA1 implements AbstractProductA {
}
package com.java.pattern.abstractfactory;
/**
* 产品A的具体实现
*/
public class ProductA2 implements AbstractProductA {
}
package com.java.pattern.abstractfactory;
/**
* 产品B的具体实现
*/
public class ProductB1 implements AbstractProductB {
}
package com.java.pattern.abstractfactory;
/**
* 产品B的具体实现
*/
public class ProductB2 implements AbstractProductB {
}
/**
* 具体的工厂实现对象,实现创建具体的产品对象的操作
*
*/
public class ConcreteFactory1 implements AbstractFactory {
public AbstractProductA createProductA() {
return new ProductA1();
}
public AbstractProductB createProductB() {
return new ProductB1();
}
}
package com.java.pattern.abstractfactory;
/**
* 具体的工厂实现对象,实现创建具体的产品对象的操作
*
*/
public class ConcreteFactory2 implements AbstractFactory {
public AbstractProductA createProductA() {
return new ProductA2();
}
public AbstractProductB createProductB() {
return new ProductB2();
}
}
package com.java.pattern.abstractfactory;
public class Client {
public static void main(String[] args) {
// 创建抽象工厂对象
AbstractFactory af = new ConcreteFactory1();
// 通过抽象工厂来获取一系列的对象,如产品A和产品B
af.createProductA();
af.createProductB();
}
}