• 设计模式抽象工厂C++实现


    /*********************************
    *设计模式--抽象工厂实现
    *C++语言
    *Author:WangYong
    *Blog:http://www.cnblogs.com/newwy
    ********************************/
    
    #include <iostream>
    using namespace std;
    
    class AbstractProductA
    {
    	public:
    	virtual ~AbstractProductA() = 0;
    	AbstractProductA(){};
    };
    AbstractProductA::~AbstractProductA(){}
    
    class ProductA1:public AbstractProductA
    {
    	public:
    		ProductA1(){cout<<"ProductA1"<<endl;}	
    };
    
    class ProductA2:public AbstractProductA
    {
    	public:
    		ProductA2(){cout<<"ProductA2"<<endl;}	
    };
    
    class AbstractProductB
    {
    	public:
    	virtual ~AbstractProductB() = 0;
    	AbstractProductB(){};
    };
    AbstractProductB::~AbstractProductB(){}
    
    class ProductB1:public AbstractProductB
    {
    	public:
    		ProductB1(){cout<<"ProductB1"<<endl;}	
    };
    
    class ProductB2:public AbstractProductB
    {
    	public:
    		ProductB2(){cout<<"ProductB2"<<endl;}	
    };
    
    class AbstractFactory
    {
    	public:
    	virtual ~AbstractFactory();
    	virtual AbstractProductA *CreateProductA() = 0;
    	virtual AbstractProductB *CreateProductB() = 0;
    };
    AbstractFactory::~AbstractFactory(){}
    class ConcreteFactory1:public AbstractFactory
    {
    	public:
    	ConcreteFactory1(){cout<<"ConcreteFactory1..."<<endl;}
    	AbstractProductA *CreateProductA()  {return new ProductA1();}
    	AbstractProductB *CreateProductB()  {return new ProductB1();}
    };
    
    class ConcreteFactory2:public AbstractFactory
    {
    	public:
    	ConcreteFactory2(){cout<<"ConcreteFactory2..."<<endl;}
    	AbstractProductA *CreateProductA(){return new ProductA2();}
    	AbstractProductB *CreateProductB(){return new ProductB2();}
    };
    
    int main()
    {
    	AbstractFactory *cf1 = new ConcreteFactory1();
    	cf1->CreateProductA();cf1->CreateProductB();
    	
    	AbstractFactory *cf2 = new ConcreteFactory2();
    	cf2->CreateProductA();cf2->CreateProductB();
    	return 0;
    }
    
    
  • 相关阅读:
    Android自己定义无下划线ClickableSapn超链接文本样式
    poj 3263 Tallest Cow(线段树)
    html css 仿微信底部自己定义菜单
    oracle-闪回技术2
    poj 3181 Dollar Dayz
    poj 3181 Dollar Dayz
    poj 3046 Ant Counting(多重集组合数)
    poj 3046 Ant Counting(多重集组合数)
    【划分数】系列问题
    【划分数】系列问题
  • 原文地址:https://www.cnblogs.com/newwy/p/1855194.html
Copyright © 2020-2023  润新知