zoukankan      html  css  js  c++  java
  • 抽象工厂模式

    1.抽象工厂模式与工厂模式

    工厂模式中的工厂和产品都有自己的一个抽象基类,每个工厂各施其职,只能生产一种产品。而抽象工厂模式可以生产一个产品族,其原因是其抽象基类中包含多个纯虚函数的接口,而工厂模式的抽象基类只有一个纯虚函数的接口。

    2.具体例子

    #include<iostream>
    using namespace std;
    class Fruit
    {
    public:
        virtual void sayName() = 0;
    };
    
    class Factory
    {
    public:
        virtual Fruit * CreateBanana() = 0;
        virtual Fruit * CreateApple() = 0;
    };
    
    class SouthApple :public Fruit
    {
    public:
        virtual void sayName()
        {
            cout << "I'm southApple" << endl;
        }
    };
    
    class NorthApple :public Fruit
    {
    public:
        virtual void sayName()
        {
            cout << "I'm northApple" << endl;
        }
    };
    class SouthBanana :public Fruit
    {
    public:
        virtual void sayName()
        {
            cout << "I'm southBanana" << endl;
        }
    };
    
    class NorthBanana :public Fruit
    {
    public:
        virtual void sayName()
        {
            cout << "I'm northBanana" << endl;
        }
    };
    
    class SouthFactory:public Factory
    {
    public:
        virtual Fruit * CreateBanana()
        {
            return new SouthBanana;
        }
        virtual Fruit * CreateApple()
        {
            return new SouthApple;
        }
    };
    
    class NorthFactory :public Factory
    {
    public:
        virtual Fruit * CreateBanana()
        {
            return new NorthBanana;
        }
        virtual Fruit * CreateApple()
        {
            return new NorthApple;
        }
    };
    
    int main()
    {
        Factory * fa = nullptr;
        Fruit * fr = nullptr;
    
        fa = new SouthFactory;
        fr = fa->CreateApple();
        fr->sayName();
        delete fr;
        fr = fa->CreateBanana();
        fr->sayName();
        delete fr;
        /*-------------------------------------*/
        fa = new NorthFactory;
        fr = fa->CreateApple();
        fr->sayName();
        delete fr;
        fr = fa->CreateBanana();
        fr->sayName();
        delete fr;
        system("pause");
    
        return 0;
    }
  • 相关阅读:
    记第一场省选
    POJ 2083 Fractal 分形
    CodeForces 605A Sorting Railway Cars 思维
    FZU 1896 神奇的魔法数 dp
    FZU 1893 内存管理 模拟
    FZU 1894 志愿者选拔 单调队列
    FZU 1920 Left Mouse Button 简单搜索
    FZU 2086 餐厅点餐
    poj 2299 Ultra-QuickSort 逆序对模版题
    COMP9313 week4a MapReduce
  • 原文地址:https://www.cnblogs.com/LifeoFHanLiu/p/9949178.html
Copyright © 2011-2022 走看看