zoukankan      html  css  js  c++  java
  • 设计模式之工厂模式 练习

    设计模式中 最基本的工厂模式

    感觉就是根据输入的类型决定选择何种类与进行何种操作。

    跟面向过程中输入1则执行func1();输入2则执行func2()基本一致的想法

    #include <iostream>
    
    using namespace std;
    
    
    enum eShoeType{ leather = 0,rubber};
    
    class CShoe{
    public:
    	virtual void What() = 0;
    };
    
    class CLeatherShoe : public CShoe
    {
    public:
    	void What() {cout << "I am leather shoe." << endl;}
    };
    
    class CRubberShoe : public CShoe
    {
    public:
    	void What() {cout << "I am rubber shoe." << endl;}
    };
    
    class CShoeFactory
    {
    public:
    	CShoe* GetShowInstance(eShoeType type)
    	{
    		cout << "工厂生产鞋子ing..." << endl;
    		switch(type)
    		{
    		case leather:
    			return new CLeatherShoe();
    		case rubber:
    			return new CRubberShoe();
    		default:
    			return NULL;
    		}
    	}
    };
    
    void TestWithCpp()
    {
    	CShoeFactory factory;
    	CShoe* pShoe = NULL; 
    
    
    	pShoe = factory.GetShowInstance(leather);
    	if(NULL != pShoe)
    	{
    		pShoe->What();
    		delete pShoe;
    		pShoe = NULL;
    	}
    	
    
     	pShoe = factory.GetShowInstance(rubber);
    	if(NULL != pShoe)
    	{
    		pShoe->What();
    		delete pShoe;
    		pShoe = NULL;
    	}
    }
    ////////////////////////////////////////////////////////
    typedef struct SHOE{
    	int type;
    	void (*print_shoe)(struct SHOE*);
    }Shoe;
    
    void PrintLeatherShoe(Shoe* pShoe)
    {
    	if(NULL != pShoe)
    		printf("I am leather shoe \n");
    }
    
    void PrintRubberShoe(Shoe* pShoe)
    {
    	if(NULL != pShoe)
    		printf("I am rubber shoe \n");
    }
    
    
    Shoe* FactoryShoe(int type)
    {
    	Shoe* pShoe = NULL;
    
    	pShoe = (Shoe*)malloc(sizeof(Shoe));
    	if(NULL == pShoe)
    		return NULL;
    	
    	memset(pShoe,0,sizeof(Shoe));
    
    	if(leather == type)
    	{
    		pShoe->type = type;
    		pShoe->print_shoe = PrintLeatherShoe;
    	}else if( rubber == type)
    	{
    		pShoe->type = type;
    		pShoe->print_shoe = PrintRubberShoe;
    	}else
    	{
    		free(pShoe);
    		pShoe = NULL;
    		return NULL;
    	}
    	return pShoe;
    }
    
    
    
    void TestWithC()
    {
    	printf("\n\n 测试C版本工厂模式\n");
    
    
    	Shoe* pShoe = FactoryShoe(leather);
    	if(NULL != pShoe)
    	{
    		pShoe->print_shoe(pShoe);
    		free(pShoe);
    		pShoe = NULL;
    	}
    
    	pShoe = FactoryShoe(rubber);
    	if(NULL != pShoe)
    	{
    		pShoe->print_shoe(pShoe);
    		free(pShoe);
    		pShoe = NULL;
    	}
    
    	pShoe = FactoryShoe(994);
    	if(NULL != pShoe)
    	{
    		pShoe->print_shoe(pShoe);
    		free(pShoe);
    		pShoe = NULL;
    	}
    
    
    }
    
    
    ////////////////////////////////////////////////////////
    int _tmain(int argc, _TCHAR* argv[])
    {
    	TestWithCpp();
    	TestWithC();
    	return 0;
    }

    我的 c++ 交流群 324164944 
  • 相关阅读:
    关于”数据库连接串中的 |DataDirectory|”
    【入门经典】Master和Content页面之一
    使用数据绑定控件
    ASP.NET数据绑定概述
    【入门经典】多层次的母版页(嵌套)
    【入门经典】在母版页中使用CSS
    内联表达式
    使用【表格式】数据绑定控件
    SQL Server 2005数据库从【Express版】迁移到【正式版】连接字符串存在的问题
    【入门经典】准备工作
  • 原文地址:https://www.cnblogs.com/itdef/p/3872722.html
Copyright © 2011-2022 走看看