1.1.1 描述
l 正规描述
同一类工厂能够生产出多种类型产品,选择哪个工厂来生产自己需要的产品由调用者自己决定。
l 形象描述
还是请MM吃西式快餐,MM说想吃肯德基的汉堡,就去肯德基店,MM说想吃麦当劳的薯片,就去麦当劳店。西式快餐店是肯德基与麦当劳的抽象,汉堡和薯片是两类食物的抽象,而肯德基的汉堡和麦当劳的薯片是具体的食物。
1.1.2 类图&示意代码
public abstract class ProductA(){ public abstract void productAMethod(); }
public abstract class ProductB(){ public abstract void productBMethod(); }
public class ConcreteProductA1 extends ProductA(){ public void productAMethod(){ System.out.println(“This is concreteProductA1”); } }
public class ConcreteProductA2 extends ProductA(){ public void productAMethod(){ System.out.println(“This is concreteProductA2”); } }
public class ConcreteProductB1 extends ProductB(){ public void productBMethod(){ System.out.println(“This is concreteProductB1”); } }
public class ConcreteProductB2 extends ProductB(){ public void productBMethod(){ System.out.println(“This is concreteProductB2”); } }
public abstract class Factory(){ public abstract ProductA createProductA(); public abstract ProductB createProductB(); }
public class ConcreteFactory1 extends Factory(){ public ProductA createProductA(){ return new ConcreteProductA1(); }
public ProductB createProductB(){ return new ConcreteProductB1(); } }
public class ConcreteFactory2 extends Factory(){ public ProductA createProductA(){ return new ConcreteProductA2(); }
public ProductB createProductB(){ return new ConcreteProductB2(); } }
public class Client(){ public void main(String args[]){ Factory f1 = new ConcreteFactory1(); ProductA pa1 = f1.createProductA(); pa1.productAMethod(); ProductB pb1 = f1.createProductB(); pb1.productBMethod();
Factory f2 = new ConcreteFactory2(); ProductA pa2 = f2.createProductA(); pa2.productAMethod(); ProductB pb2 = f2.createProductB(); pb2.productBMethod(); } } |
注:
1、 工厂类分为抽象工厂类和实体工厂类,可以有多个实体工厂类
2、 有多个抽象产品类,每一个抽象产品类又有多个实体产品子类
3、 每一个实体工厂类负责创建一类实体产品类