zoukankan      html  css  js  c++  java
  • 行为模式->模版方法模式

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

          模板方法模式是一种基于继承的代码复用技术,它是一种类行为型模式,类似与基类 子类的多态实现  对于继承多态熟悉的人 经常用在工作中无形中就在用此法了。

           在模板方法模式中,可以将相同的代码放在父类中,例如将模板方法“请客”以及基本方法“点单”和“买单”的实现放在父类中,而对于基本方法“吃东西”,在父类中只做一个声明,将其具体实现放在不同的子类中,在一个子类中提供“吃面条”的实现,而另一个子类提供“吃满汉全席”的实现。通过使用模板方法模式,一方面提高了代码的复用性,另一方面还可以利用面向对象的多态性,在运行时选择一种具体子类,实现完整的“请客”方法,提高系统的灵活性和可扩展性。

          模版方法通过把不变行为搬移到超类中,去除子类中重复的代码 很好的实现代码复用。

         

    // template method pattern  就是工作中常用的继承跟多态 
    class Resume  
    {  
    protected: //保护成员  
        virtual void SetPersonalInfo() {}  
        virtual void SetEducation() {}  
        virtual void SetWorkExp() {}  
    public:  
        void FillResume()   
        {  
            SetPersonalInfo();  
            SetEducation();  
            SetWorkExp();  
        }  
    };  
    class ResumeA: public Resume  
    {  
    protected:  
        void SetPersonalInfo() { cout<<"A's PersonalInfo"<<endl; }  
        void SetEducation() { cout<<"A's Education"<<endl; }  
        void SetWorkExp() { cout<<"A's Work Experience"<<endl; }  
    };  
    class ResumeB: public Resume  
    {  
    protected:  
        void SetPersonalInfo() { cout<<"B's PersonalInfo"<<endl; }  
        void SetEducation() { cout<<"B's Education"<<endl; }  
        void SetWorkExp() { cout<<"B's Work Experience"<<endl; }  
    };  
    int main()  
    {  
        Resume *r1;  
        r1 = new ResumeA();  
        r1->FillResume();  
        delete r1;  
        r2 = new ResumeB();  
        r2->FillResume();  
        delete r2;  
        r2 = NULL;  
        return 0;  
    }  
    

    关注公众号 海量干货等你
  • 相关阅读:
    年末反思
    Flink运行时架构
    Phoenix 启动报错:Error: ERROR 726 (43M10): Inconsistent namespace mapping properties. Cannot initiate connection as SYSTEM:CATALOG is found but client does not have phoenix.schema.
    Clickhouse学习
    Flink简单认识
    IDEA无法pull代码到本地,Can't Update No tracked branch configured for branch master or the branch doesn't exist.
    第1章 计算机系统漫游
    简单的 Shell 脚本入门教程
    开源≠免费 常见开源协议介绍
    MySQL 视图
  • 原文地址:https://www.cnblogs.com/sowhat1412/p/12734430.html
Copyright © 2011-2022 走看看