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;
    }
  • 相关阅读:
    微信小程序之:获得appid
    小程序v0.10基本布局
    小程序v0.02 清理干净
    微信小程序v0.01
    让Eclipse在10秒内启动的7个优化提速技巧
    转 1 年经验 Java 求职面试题
    坑爹啊
    ES6,时间格式yyyy-MM-dd HH:MM:SS
    ln: creating hard link 问题
    boost实现串口通信(一):小试牛刀
  • 原文地址:https://www.cnblogs.com/LifeoFHanLiu/p/9949178.html
Copyright © 2011-2022 走看看