zoukankan      html  css  js  c++  java
  • 设计模式之模板方法模式(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. 当算法能够实现统一步骤,并且可以划分不变部分和可变部分,将可变互粉在子类中实现算法不同的变化;
  • 相关阅读:
    LINQ 为C#开发的一种类似于SQL的语言
    Perl函数集
    职场新鲜人:为什么女生拼不过男生?
    字符串查找 cmd find命令
    职业规划师:如何给自己挑选一个好老板
    C# const, readonly, static readonly
    转载:抽象工厂模式与工厂方法模式区别
    教育法则
    poj 1509 Glass Beads
    hdu 2602 Bone Collector
  • 原文地址:https://www.cnblogs.com/chencarl/p/8719776.html
Copyright © 2011-2022 走看看