• 设计模式之模板方法模式(TemplateMethod)


    模板方法模式使用继承来实现模式的功能,在基类使用一个方法来定义算法的各个步骤,这些步骤(方法)的具体实现会放到子类中,通过这样来实现不同算法对象的算法拼合,完成该对象整体算法的实现。

    作用

    模板方法中定义了具体操作中所使用算法的各个步骤,并将其实现交由子类完成,从而实现多种不同的功能;

    类视图

    实现

    class Lunch
    {
    public:
    	Lunch(){}
    	virtual ~Lunch(){}
    
    	void feed()
    	{
    		cooking();
    		eating();
    		cleaning();
    	}
    	virtual void cooking()=0;
    	virtual void eating()
    	{
    		cout<<"I am eating,Please don't disturb me
    ";
    	}
    	virtual void cleaning();
    };
    
    
    class MCMeal : public Lunch
    {
    public:
    	MCMeal(){}
    	virtual ~MCMeal(){}
    
    	void cooking()
    	{
    		cout<< "I am cooking Mc Meal
    ";
    	}
    	void cleaning()
    	{
    		cout<< "I am cleaning Mc plates";
    	}
    };
    
    class KFCMeal : public Lunch
    {
    public:
    	KFCMeal() {}
    	virtual ~KFCMeal(){}
    
    	void cooking()
    	{
    		cout<< "I am cooking KFC Meal
    ";
    	}
    	void eating
    	{
    		cout<< "KFC Meal is good
    ";
    	}
    	void cleaning()
    	{
    		cout<< "I am cleaning KFC plates and cups
    ";
    	}
    };
    
    
    int main()
    {
    	Lunch* meal1 = new McMeal();
    	meal1.feed();
    	Lunch* meal2 = new KFCMeal();
    	meal2.feed();
    }
    
    

    应用场景

    1. 当一个算法功能需要能够改变,并通过在子类中对功能重写来实现这种变化;
    2. 当算法能够实现统一步骤,并且可以划分不变部分和可变部分,将可变互粉在子类中实现算法不同的变化;
  • 相关阅读:
    oracle中获取当前整点和上一个小时整点,日期类型
    MYSQL中替换oracle中runum用法
    oracle 中备份表
    發生了不愉快的事情
    今年下雪了。。。
    VB.net下非常好用的实现FTP的类
    今年過節不回家了
    焕肤:不要暗沉
    不要打梦到的电话号码。。。
    關於IT職業的思考
  • 原文地址:https://www.cnblogs.com/chencarl/p/8719776.html
Copyright © 2020-2023  润新知