抽象工厂模式

来源:互联网 发布:自学办公软件视频教程 编辑:程序博客网 时间:2024/06/08 11:56

抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。根据里氏替换原则,任何接受父类型的地方,都应当能够接受子类型。
这里写图片描述


Java

Creator

public interface Creator {    public ProductA factoryA();    public ProductB factoryB();}

ConcreteCreator

public class ConcreteCreator1 implements Creator{    @Override    public ProductA factoryA() {        return new ProductA1();    }    @Override    public ProductB factoryB() {        return new ProductB1();    }}public class ConcreteCreator2 implements Creator{    @Override    public ProductA factoryA() {        return new ProductA2();    }    @Override    public ProductB factoryB() {        return new ProductB2();    }

Product

public interface ProductA {    void show();}public interface ProductB {    void show();}

ConcreteProduct

public class ProductA1 implements ProductA {    @Override    public void show() {        System.out.println("ProductA1");    }}public class ProductA2 implements ProductA {    @Override    public void show() {        System.out.println("ProductA2");    }}public class ProductB1 implements ProductB {    @Override    public void show() {        System.out.println("ProductB1");    }}public class ProductB2 implements ProductB {    @Override    public void show() {        System.out.println("ProductB2");    }}

Client

public class Client {    public static void main(String[] args) {        Creator creator1 = new ConcreteCreator1();        creator1.factoryA().show();        creator1.factoryB().show();        Creator creator2 = new ConcreteCreator2();        creator2.factoryA().show();        creator2.factoryB().show();    }}

C井

Creator

    public interface Creator    {        ProductA factoryA();        ProductB factoryB();    }

ConcreteCreator

    public class ConcreteCreator1 : Creator    {        public ProductA factoryA() {        return new ProductA1();    }    public ProductB factoryB() {        return new ProductB1();    }    }    public class ConcreteCreator2 : Creator    {        public ProductA factoryA() {        return new ProductA2();    }    public ProductB factoryB() {        return new ProductB2();    }    }

Product

    public interface ProductA    {        void show();    }    public interface ProductB    {        void show();    }

ConcreteProduct

public class ProductA1 : ProductA    {        public void show()         {            Console.WriteLine("ProductA1");        }    }public class ProductA2 : ProductA    {        public void show()        {            Console.WriteLine("ProductA2");        } public class ProductB1 : ProductB    {        public void show()        {            Console.WriteLine("ProductB1");        }    }public class ProductB2 : ProductB    {        public void show()        {            Console.WriteLine("ProductB2");        }    }

Client

public static void Main(string[] args)        {            Creator creator1 = new ConcreteCreator1();            creator1.factoryA().show();            creator1.factoryB().show();            Creator creator2 = new ConcreteCreator2();            creator2.factoryA().show();            creator2.factoryB().show();            Console.ReadLine();        }

C艹

Product

class ProductA{public:    virtual void show() = 0;};class ProductB{public:    virtual void show() = 0;};

ConcreteProduct

class ProductA1 : public ProductA{public:    virtual ~ProductA1() {};    virtual void show()    {        cout << "ProductA1" << endl;    };};class ProductA2 : public ProductA{public:    virtual ~ProductA2() {};    virtual void show()    {        cout << "ProductA2" << endl;    };};class ProductB1 : public ProductB{public:    virtual ~ProductB1() {};    virtual void show()    {        cout << "ProductB1" << endl;    };};class ProductB2 : public ProductB{public:    virtual ~ProductB2() {};    virtual void show()    {        cout << "ProductB2" << endl;    };};

Creator

class Creator{public:    virtual ProductA* factoryA() = 0;    virtual ProductB* factoryB() = 0;};

ConcreteCreator

class ConcreteCreator1 : public Creator{public:    virtual ~ConcreteCreator1() {};    virtual ProductA* factoryA()    {        return new ProductA1;    };    virtual ProductB* factoryB()    {        return new ProductB1;    };};class ConcreteCreator2 : public Creator{public:    virtual ~ConcreteCreator2() {};    virtual ProductA* factoryA()    {        return new ProductA2;    };    virtual ProductB* factoryB()    {        return new ProductB2;    };};

Client

int main(){    Creator* creator1 = new ConcreteCreator1;    ProductA* productA1 = creator1->factoryA();    productA1->show();    delete productA1;    ProductB* productB1 = creator1->factoryB();    productB1->show();    delete productB1;    delete creator1;    Creator* creator2 = new ConcreteCreator2;    ProductA* productA2 = creator1->factoryA();    productA2->show();    delete productA2;    ProductB* productB2 = creator1->factoryB();    productB2->show();    delete productB2;    delete creator2;    system("pause");    return 0;}

0 0