zoukankan      html  css  js  c++  java
  • 抽象工厂模式——C++实现

    问题描述:

    使用抽象工厂模式,完成下述产品等级结构:

    C++代码:

    #include<iostream>
    using namespace std;
    //抽象产品类——Man类
    class Man{
    public:
           virtual void show() = 0;
    };
    //抽象产品类——Woman类
    class Woman{
    public:
           virtual void show() = 0;
    };
    //具体产品类——YellowMan类
    class YellowMan : public Man{
    public:
           virtual void show(){
                 cout << "黄皮肤的男性" << endl;
           }
    };
    //具体产品类——BlackMan类
    class BlackMan : public Man{
    public:
           virtual void show(){
                  cout << "黑皮肤的男性" << endl;
           }
    };
    //具体产品类——WhiteMan类
    class WhiteMan : public Man{
    public:
           virtual void show(){
                  cout << "白皮肤的男性" << endl;
           }
    };
    //具体产品类——YellowWoman类
    class YellowWoman : public Woman{
    public:
           virtual void show(){
                  cout << "黄皮肤的女性" << endl;
           }
    };
    //具体产品类——BlackWoman类
    class BlackWoman : public Woman{
    public:
           virtual void show(){
                  cout << "黑皮肤的女性" << endl;
           }
    };
    //具体产品类——WhiteWoman类
    class WhiteWoman : public Woman{
    public:
           virtual void show(){
                  cout << "白皮肤的女性" << endl;
           }
    };
    //抽象工厂类——AbstractFactory类
    class AbstractFactory{
    public:
           virtual Man* produceMan() = 0;
           virtual Woman* produceWoman() = 0;
    };
    //具体工厂类——YellowFactory类
    class YellowFactory : public AbstractFactory{
    public:
           virtual Man* produceMan(){
                  return new YellowMan();
           }
           virtual Woman* produceWoman(){
                         return new YellowWoman();
           }
    };
    //具体工厂类——BlackFactory类
    class BlackFactory : public AbstractFactory{
    public:
           virtual Man* produceMan(){
                  return new BlackMan();
           }
           virtual Woman* produceWoman(){
                         return new BlackWoman();
           }
    };
    //具体工厂类——WhiteFactory类
    class WhiteFactory : public AbstractFactory{
    public:
           virtual Man* produceMan(){
                  return new WhiteMan();
           }
           virtual Woman* produceWoman(){
                         return new WhiteWoman();
           }
    };
    //测试类——test类
    void test(){
           //黄皮肤工厂
           AbstractFactory* factory = NULL;
           factory = new YellowFactory;
           Man* man = factory->produceMan();
           man->show();
           delete man;
           man = NULL;
           
           Woman* woman = factory->produceWoman();
           woman->show();
           delete woman;
           woman = NULL;
           delete factory;
           factory = NULL;
    	   cout<<"*************************"<<endl;
    
           //黑皮肤工厂
           factory = new BlackFactory;
           man = factory->produceMan();
           man->show();
           delete man;
           man = NULL;
           
           woman = factory->produceWoman();
           woman->show();
           delete woman;
           woman = NULL;
           delete factory;
           factory = NULL;
    	   cout<<"*************************"<<endl;
    
    	   //白皮肤工厂
    	   factory = new WhiteFactory;
           man = factory->produceMan();
           man->show();
           delete man;
           man = NULL;
           
           woman = factory->produceWoman();
           woman->show();
           delete woman;
           woman = NULL;
           delete factory;
           factory = NULL;
    }
    int main(){
           test();
           return 0;
    }
    

      

    运行结果:

    #include<iostream>

    using namespace std;

    //抽象产品类——Man类

    class Man{

    public:

           virtual void show() = 0;

    };

    //抽象产品类——Woman类

    class Woman{

    public:

           virtual void show() = 0;

    };

    //具体产品类——YellowMan类

    class YellowMan : public Man{

    public:

           virtual void show(){

                 cout << "黄皮肤的男性" << endl;

           }

    };

    //具体产品类——BlackMan类

    class BlackMan : public Man{

    public:

           virtual void show(){

                  cout << "黑皮肤的男性" << endl;

           }

    };

    //具体产品类——WhiteMan类

    class WhiteMan : public Man{

    public:

           virtual void show(){

                  cout << "白皮肤的男性" << endl;

           }

    };

    //具体产品类——YellowWoman类

    class YellowWoman : public Woman{

    public:

           virtual void show(){

                  cout << "黄皮肤的女性" << endl;

           }

    };

    //具体产品类——BlackWoman类

    class BlackWoman : public Woman{

    public:

           virtual void show(){

                  cout << "黑皮肤的女性" << endl;

           }

    };

    //具体产品类——WhiteWoman类

    class WhiteWoman : public Woman{

    public:

           virtual void show(){

                  cout << "白皮肤的女性" << endl;

           }

    };

    //抽象工厂类——AbstractFactory类

    class AbstractFactory{

    public:

           virtual Man* produceMan() = 0;

           virtual Woman* produceWoman() = 0;

    };

    //具体工厂类——YellowFactory类

    class YellowFactory : public AbstractFactory{

    public:

           virtual Man* produceMan(){

                  return new YellowMan();

           }

           virtual Woman* produceWoman(){

                         return new YellowWoman();

           }

    };

    //具体工厂类——BlackFactory类

    class BlackFactory : public AbstractFactory{

    public:

           virtual Man* produceMan(){

                  return new BlackMan();

           }

           virtual Woman* produceWoman(){

                         return new BlackWoman();

           }

    };

    //具体工厂类——WhiteFactory类

    class WhiteFactory : public AbstractFactory{

    public:

           virtual Man* produceMan(){

                  return new WhiteMan();

           }

           virtual Woman* produceWoman(){

                         return new WhiteWoman();

           }

    };

    //测试类——test类

    void test(){

           //黄皮肤工厂

           AbstractFactory* factory = NULL;

           factory = new YellowFactory;

           Man* man = factory->produceMan();

           man->show();

           delete man;

           man = NULL;

           

           Woman* woman = factory->produceWoman();

           woman->show();

           delete woman;

           woman = NULL;

           delete factory;

           factory = NULL;

       cout<<"*************************"<<endl;

     

           //黑皮肤工厂

           factory = new BlackFactory;

           man = factory->produceMan();

           man->show();

           delete man;

           man = NULL;

           

           woman = factory->produceWoman();

           woman->show();

           delete woman;

           woman = NULL;

           delete factory;

           factory = NULL;

       cout<<"*************************"<<endl;

     

       //白皮肤工厂

       factory = new WhiteFactory;

           man = factory->produceMan();

           man->show();

           delete man;

           man = NULL;

           

           woman = factory->produceWoman();

           woman->show();

           delete woman;

           woman = NULL;

           delete factory;

           factory = NULL;

    }

    int main(){

           test();

           return 0;

    }

  • 相关阅读:
    Java 条件语句
    Java循环
    Java 变量
    Java 数据类型
    nginx+php发布网站
    安装MySQL5.7
    docker-compose参数
    部署
    dockerfile编写
    在VMware中安装CentOS7
  • 原文地址:https://www.cnblogs.com/znjy/p/14152857.html
Copyright © 2011-2022 走看看