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;
    }
  • 相关阅读:
    评论啦 测试 PHP
    简易JSON格式化 PHP
    36进制 PHP
    CSS3字体阴影演示 PHP
    IE下获取所有客户端字体,设置背景色 PHP
    获取页面宽高数据 PHP
    recognize和recognition
    增强Activex控件,暴露method方法,在javascript中操作activex控件并调用web service方法
    javascript 也可以用try catch了.
    toggle
  • 原文地址:https://www.cnblogs.com/LifeoFHanLiu/p/9949178.html
Copyright © 2011-2022 走看看