zoukankan      html  css  js  c++  java
  • 设计模式之七:模板方法模式(Template Method)

    模板方法模式:
    定义了一个算法的基本操作骨架,并将算法的一些步骤延迟到子类中来实现。
    模板方法模式让子类在不更改算法结构的前提下能够又一次定义算法的一些步骤。

    Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure.

    UML图:

    这里写图片描写叙述

    主要包含:

    1. AbstractClass:定义了一个子类须要又一次实现的算法的某些步骤primitiveOperation,实现了一个模板方法,这个模板方法调用定义于AbstractClass和又一次定义与子类中的某些函数。
    2. ConcreteClass:实现了primitiveOperation以完毕算法中某些特定的步骤。

    C++代码例如以下:

    #include <iostream>
    
    class AbstractClass
    {
            public:
                    void templateMethod()
                    {
                        std::cout<<"before primitiveOperation1"<<std::endl;
                        primitiveOperation1();
                        std::cout<<"after primitiveOperation1"<<std::endl;
                        std::cout<<"before primitiveOpreation2"<<std::endl;
                        primitiveOperation2();
                        std::cout<<"after primitiveOperation2"<<std::endl;
                    }
                    virtual void primitiveOperation1()=0;
                    virtual void primitiveOperation2()=0;
    
    };
    
    class ConcreteClass :public AbstractClass
    {
        public:
                void primitiveOperation1()
                {
                    std::cout<<"ConcreteClass primitiveOperation1"<<std::endl;
                }
                void primitiveOperation2()
                {
                    std::cout<<"ConcreteClass primitiveOperation2"<<std::endl;
                }
    
    };
    
    int main()
    {
        AbstractClass * cc=new ConcreteClass;
        cc->templateMethod();
        return 0;
    }
    

    运行输出:

    这里写图片描写叙述

    事实上这个设计模式经经常使用到。基本上用到继承和多态这两个性质的话都会和这个设计模式打交道。

  • 相关阅读:
    [日常训练]大灾难
    [cf235D]Graph Game
    [日常训练]选课
    [日常训练]挂科
    [学习笔记]概率&期望
    [日常训练]yayamao的神题
    [学习笔记]原根
    LOJ#2132. 「NOI2015」荷马史诗
    LOJ#2131. 「NOI2015」寿司晚宴
    LOJ#2129. 「NOI2015」程序自动分析
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5413201.html
Copyright © 2011-2022 走看看