设计模式之七:模板方法模式(Template Method)-阿里云开发者社区

开发者社区> 技术mix呢> 正文

设计模式之七:模板方法模式(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;
}

运行输出:

这里写图片描写叙述

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






本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5413201.html,如需转载请自行联系原作者  

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
用阿里云建网站三种方式(自助建站+模板建站+功能定制建站)
站长分享利用阿里云创建网站的三种方式及优势对比
94 0
21、Python与设计模式--备忘录模式
#一、游戏进度保存 打过游戏的朋友一定知道,大多数游戏都有保存进度的功能,如果一局游戏下来,忘保存了进度,那么下次只能从上次进度点开始重新打了。一般情况下,保存进度是要存在可持久化存储器上,本例中先以保存在内存中来模拟实现该场景的情形。 以模拟一个战斗角色为例。首先,创建游戏角色。 ``` class GameCharacter(): vitality = 0 atta
3377 0
模板(templates)
通常情况下,我们不会像hello world一样直接在视图函数中编写返回内容,而是专门返回一个渲染过的模板。Flask使用Jinja2完成这一任务。 1.
513 0
+关注
2969
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载