zoukankan      html  css  js  c++  java
  • 大话设计模式C++版——建造者模式

        日常做菜的过程中,经常会有忘记放盐或者放2次盐的经历,最后导致好好的一盘菜让大家无从下口。这个时候就需要用到建造者模式来规范炒菜的过程,来保证每一道菜都会经历加油、放食物、放盐、放味精这4道基本的工序,同时保证每道工序不会重复。

    1、炒菜基类

    class CCook
    {
    public:
    	CCook()	{}
    	virtual	~CCook() {}
    	
    	//建造过程函数
    	//为了保证所有的子类能够按照指定顺序依次实现完整的建造过程,而不会忘记某一个过程的调用(如忘了放盐)
    	void	Cook()
    	{
    		PutFat();			//先放油
    		PutFood();			//再放食物
    		PutSalt();			//接着放盐
    		PutAginomoto();		//最后放味精
    	}
    
    protected:
    	virtual	void PutFat() = 0;
    	virtual	void PutFood() = 0;
    	virtual	void PutSalt() = 0;
    	virtual	void PutAginomoto() = 0;
    };

    2、炒肉类,继承并实现CCook的每一道工序

    class CCookMeat : public CCook
    {
    public:
    
    private:
    	void PutFat()
    	{
    		printf("Please input 10 gram fat to the pen
    ");
    	}
    	
    	void PutFood()
    	{
    		printf("Please input 500 gram meat to the pen
    ");
    	}
    	
    	void PutSalt()
    	{
    		printf("Please input 2 gram salt to the pen
    ");
    	}
    	
    	void PutAginomoto()
    	{
    		printf("Please iput 1 gram aginomoto to the pen
    ");
    	}
    };

    3、实现示例

    void	Test()
    {
    	CCookMeat	oCCookMeat;
    
    	oCCookMeat.Cook();
    }

    运行结果如下:

       我们在开发过程中经常会碰到一种情况,一个类实现了一组底层的基本功能,但实现一个高级功能时需要把某些基本功能组合起来调用,这时采用建造者模式就能保证调用过程顺序一致且无遗漏,同时调用者调用也很简单(如炒菜就只需调用Cook()函数即可,而不用去关心每一个具体细节)。

    本文为博主原创文章,如需转载请说明转至http://www.cnblogs.com/organic/
  • 相关阅读:
    c#中MessageBox的使用(转)
    ArcGIS中地图配准(转)
    VS2010中VC9.0Runtime与VC10.0Runtime在win7上装不上提示error code 1603(转)
    win7下安装Oracle 10G 的成功方法
    解决win 7 下打不开chm格式文件的办法
    vi 编辑器
    开源赚钱思路
    如何开始linux 编程
    Linux C语言开发基础
    如何做开源项目——ABC
  • 原文地址:https://www.cnblogs.com/organic/p/5005639.html
Copyright © 2011-2022 走看看