Chapter10 模板方法模式

模板方法模式简介

模板方法模式,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即重定义该算法的某些特定步骤。

父类可以成为子类的模板,所有重复的代码都应该要上升到父类去,而不是让每个子类都去重复。

当我们要完成某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法模式来处理。

模板方法模式是通过把不变形为搬移到超类,去除子类中的重复代码来体现它的优势。它提供了一个很好的代码复用平台。

当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。我们通过模板方法模式可以把这些行为搬移到单一的地方,这样就帮助子类摆脱重复的不变行为的纠缠。

模板方法模式UML类图

 

 

C++代码实现

// 抽象基类,包含模板getBook,把具体不同的细节交给getName完成
#ifndef _ABSTRACTCLASS_HPP
#define _ABSTRACTCLASS_HPP

#include<string>
#include<iostream>
using namespace std;

class AbstractClass{
public:
    virtual string getName() = 0;
    void getBook(){
        cout << "this book is named " << getName()<<endl;
    }

};

#endif
//实现具体细节的子类
#ifndef _CONCRETECLASS_HPP
#define _CONCRETECLASS_HPP
#include"abstractclass.hpp"
#include<iostream>
#include<string>
using namespace std;

class ConcreteClass : public AbstractClass{
    virtual string getName()override{
        return "book1";
    }  
};

#endif
//客户端程序
#include"concreteclass.hpp"

using namespace std;
int main(){
    ConcreteClass cc;
    cc.getBook();

    getchar();
    return 0;

 

posted @ 2020-03-19 22:32  yangbofun  阅读(115)  评论(0)    收藏  举报