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;  
    }  
    

    关注公众号 海量干货等你
  • 相关阅读:
    UVA1349 Optimal Bus Route Design 最优巴士路线设计
    POJ3565 Ants 蚂蚁(NEERC 2008)
    UVA1663 Purifying Machine 净化器
    UVa11996 Jewel Magic 魔法珠宝
    NEERC2003 Jurassic Remains 侏罗纪
    UVA11895 Honorary Tickets
    gdb调试coredump(使用篇)
    使用 MegaCLI 检测磁盘状态并更换磁盘
    员工直接坦诚直来直去 真性情
    山东浪潮超越3B4000申泰RM5120-L
  • 原文地址:https://www.cnblogs.com/sowhat1412/p/12734430.html
Copyright © 2011-2022 走看看