抽象工厂模式,意图 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
抽象工厂 区分于 工厂方法的是:
抽象工厂 可以有多个抽象产品类,每个产品类可以派生出多个具体产品类。一个抽象工厂类,可以派生出多个具体工厂类。每个具体工厂类可以创建多个具体产品类的实例。
看看代码实现的:
抽象产品类
package com.wanq.designmode.abstractFactory;
/**
* @author-WanQ
* @创建时间:2013-3-24 下午05:17:53
* @类说明:
*
*/
public abstract class AbstractProductA {
// 每个产品共有的方法
public void shareMethod(){
}
// 每个产品相同方法,不同实现
public abstract void doSomething();
}
具体产品类
package com.wanq.designmode.abstractFactory;
/**
* @author-WanQ
* @创建时间:2013-3-24 下午05:27:11
* @类说明:
*
*/
public class ProductA1 extends AbstractProductA {
@Override
public void doSomething() {
// TODO Auto-generated method stub
System.out.println("产品A1的实现方法");
}
}
抽象工厂类
package com.wanq.designmode.abstractFactory;
/**
* @author-WanQ
* @创建时间:2013-3-24 下午05:31:32
* @类说明:
*
*/
public abstract class AbstractCreator {
//创建A产品家族
public abstract AbstractProductA createProductA();
//创建B产品家族
public abstract AbstractProductB createProductB();
}
工厂实现类
package com.wanq.designmode.abstractFactory;
/**
* @author-WanQ
* @创建时间:2013-3-24 下午05:34:02
* @类说明:
*
*/
public class Creator1 extends AbstractCreator {
@Override
public AbstractProductA createProductA() {
// TODO Auto-generated method stub
return new ProductA1();
}
@Override
public AbstractProductB createProductB() {
// TODO Auto-generated method stub
return new ProductB1();
}
}
调用场景
package com.wanq.designmode.abstractFactory;
/**
* @author-WanQ
* @创建时间:2013-3-24 下午05:36:02
* @类说明:
*
*/
public class Client {
public static void main(String[] args){
AbstractCreator creator1 = new Creator1();
AbstractCreator creator2 = new Creator2();
AbstractProductA a1 = creator1.createProductA();
AbstractProductA a2 = creator2.createProductA();
AbstractProductB b1 = creator1.createProductB();
AbstractProductB b2 = creator2.createProductB();
// ...
}
}