设计模式之抽象工厂

Posted d_pay

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式之抽象工厂相关的知识,希望对你有一定的参考价值。

抽象工厂(Abstract Factory)

 定义:

  Provide an interface for creating families of related or dependent objects without specifying their concrete classes.

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

类图:

  技术分享

  

  例子:

  

abstract class AbstractProductA{
    public abstract void operationA1();
    public abstract void operationA2();
}

class ProductA1 extends AbstractProductA{
    ProductA1(String arg){
        System.out.println("Hello "+arg);
    } // Implement the code here
    public void operationA1() { };
    public void operationA2() { };
}

class ProductA2 extends AbstractProductA{
    ProductA2(String arg){
        System.out.println("Hello "+arg);
    } // Implement the code here
    public void operationA1() { };
    public void operationA2() { };
}

abstract class AbstractProductB{
    //public abstract void operationB1();
    //public abstract void operationB2();
}

class ProductB1 extends AbstractProductB{
    ProductB1(String arg){
        System.out.println("Hello "+arg);
    } // Implement the code here
}

class ProductB2 extends AbstractProductB{
    ProductB2(String arg){
        System.out.println("Hello "+arg);
    } // Implement the code here
}

abstract class AbstractFactory{
    abstract AbstractProductA createProductA();
    abstract AbstractProductB createProductB();
}

class ConcreteFactory1 extends AbstractFactory{
    AbstractProductA createProductA(){
        return new ProductA1("ProductA1");
    }
    AbstractProductB createProductB(){
        return new ProductB1("ProductB1");
    }
}

class ConcreteFactory2 extends AbstractFactory{
    AbstractProductA createProductA(){
        return new ProductA2("ProductA2");
    }
    AbstractProductB createProductB(){
        return new ProductB2("ProductB2");
    }
}

//Factory creator - an indirect way of instantiating the factories
class FactoryMaker{
    private static AbstractFactory pf=null;
    static AbstractFactory getFactory(String choice){
        if(choice.equals("a")){
            pf=new ConcreteFactory1();
        }else if(choice.equals("b")){
                pf=new ConcreteFactory2();
            } return pf;
    }
}

// Client
public class Client{
    public static void main(String args[]){
        AbstractFactory pf=FactoryMaker.getFactory("a");
        AbstractProductA product=pf.createProductA();
        //more function calls on product
    }
}

 

 应用场景:一个对象族或一组没有任何关系的对象都有相同的约束,则可以使用抽象工厂。

 

以上是关于设计模式之抽象工厂的主要内容,如果未能解决你的问题,请参考以下文章

设计模式之抽象工厂模式

创建型模式之抽象工厂模式实例及代码操作

设计模式探秘之抽象工厂模式

设计模式之简单工厂工厂方法抽象工厂

设计模式之抽象工厂模式

设计模式之抽象工厂模式