设计模式之禅-抽象工厂

抽象工厂模式:为创建一组相关或互相以来的对象提供一个接口,而且无需制定它们的具体类。

抽象工厂模式是工厂方法模式的升级版本,在有多个业务品种、业务分类时,通过抽象工厂产生需要的对象是非常好的解决方式。即工厂方法只满足单一条件商品的创建,而若对商品进行另一条件分类时,就显得乏力了。抽象工厂是将工厂细分,通过接口回调子工厂的方式实现高内聚的。

 

package demo;
/**
 * 抽象产品类
 * @author zhf
 *
 */
public abstract class AbstractProductA {
    //每个产品共有的方法
    public void shareMethod(){
        
    }
    //每个产品相同方法,不同实现
    public abstract void doSomething();
    
}

package demo;
/**
 * 抽象产品类
 * @author zhf
 *
 */
public abstract class AbstractProductB {
    //每个产品共有的方法
    public void shareMethod(){
        
    }
    //每个产品相同方法,不同实现
    public abstract void doSomething();
    
}


package demo;

public class ProductA1 extends AbstractProductA {
    @Override
    public void doSomething() {
        //产品一的实现方法
        
    }

}

package demo;

public class ProductA2 extends AbstractProductA {
    @Override
    public void doSomething() {
        //产品二的实现方法
        
    }

}

package demo;

public class ProductB1 extends AbstractProductB {
    @Override
    public void doSomething() {
        //产品一的实现方法
        
    }

}

package demo;

public class ProductB2 extends AbstractProductB {
    @Override
    public void doSomething() {
        //产品二的实现方法
        
    }

}


package demo;

public abstract class AbstractCreator {
    public abstract AbstractProductA createProductA();
    public abstract AbstractProductB createProductB();

}


package demo;
/**
 * 产品等级1的实现类
 * @author zhf
 *
 */
public class Creator1 extends AbstractCreator{
    @Override
    public AbstractProductA createProductA() {
        return new ProductA1();
    }
    @Override
    public AbstractProductB createProductB() {
        // TODO Auto-generated method stub
        return new ProductB1();
    }
}

package demo;
/**
 * 产品等级2
 * @author zhf
 *
 */
public class Creator2 extends AbstractCreator{
    @Override
    public AbstractProductA createProductA() {
        // TODO Auto-generated method stub
        return new ProductA2();
    }
    @Override
    public AbstractProductB createProductB() {
        // TODO Auto-generated method stub
        return new ProductB2();
    }
}

package demo;

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();
    }

}
posted @ 2012-06-11 19:17  风叉叉  阅读(138)  评论(0编辑  收藏  举报