设计模式的解析和实现(C++)之十一-TemplateMethod模式

作用:

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

UML结构图:


抽象基类:

1)AbstractClass:抽象基类,定义算法的轮廓

解析:

TemplateMethod 的关键在于在基类中定义了一个算法的轮廓,但是算法每一步具体的实现留给了派生类.但是这样也会造成设计的灵活性不高的缺点,因为轮廓已经定下来了要想改变就比较难了,这也是为什么优先采用聚合而不是继承的原因.

实现:

1)TemplateMethod.h

/**//********************************************************************
    created:    2006/07/20
    filename:     TemplateMethod.h
    author:        李创
                http://www.cppblog.com/converse/

    purpose:    TemplateMethod模式的演示代码
*********************************************************************/

// 抽象基类,定义算法的轮廓
class AbstractClass
{
public:
    AbstractClass(){}
    virtual ~AbstractClass(){}

    // 这个函数中定义了算法的轮廓
    void TemplateMethod();

protected:
    // 纯虚函数,由派生类实现之
    virtual void PrimitiveOperation1() = 0;
    virtual void PrimitiveOperation2() = 0;
};

// 继承自AbstractClass,实现算法
class ConcreateClass
    : public AbstractClass
{
public:
    ConcreateClass(){}
    virtual ~ConcreateClass(){}

protected:
    virtual void PrimitiveOperation1();
    virtual void PrimitiveOperation2();
};

时间: 2024-10-26 01:21:06

设计模式的解析和实现(C++)之十一-TemplateMethod模式的相关文章

设计模式的解析和实现(C++)之十七-State模式

作用: 允许一个对象在其内部状态改变时改变它的行为. UML结构图: 解析: State模式主要解决的是在开发中时常遇到的根据不同的状态需要进行不同的处理操作的问题,而这样的问题,大部分人是采用switch-case语句进行处理的,这样会造成一个问题:分支过多,而且如果加入一个新的状态就需要对原来的代码进行编译.State模式采用了对这些不同的状态进行封装的方式处理这类问题,当状态改变的时候进行处理然后再切换到另一种状态,也就是说把状态的切换责任交给了具体的状态类去负责.同时,State模式和S

设计模式的解析和实现(C++)之十三-FlyWeight模式

作用: 运用共享技术有效地支持大量细粒度的对象. UML结构图: 解析: Flyweight模式在大量使用一些可以被共享的对象的时候经常使用.比如,在QQ聊天的时候很多时候你懒得回复又不得不回复的时候,一般会用一些客套的话语敷衍别人,如"呵呵","好的"等等之类的,这些简单的答复其实每个人都是提前定义好的,在使用的时候才调用出来.Flyweight就是基于解决这种问题的思路而产生的,当需要一个可以在其它地方共享使用的对象的时候,先去查询是否已经存在了同样的对象,如果

设计模式的解析和实现(C++)之十-Proxy模式

作用: 为其他对象提供一种代理以控制对这个对象的访问. UML结构图: 抽象基类: 1)Subject:定义了Proxy和RealSubject的公有接口,这样就可以在任何需要使用到RealSubject的地方都使用Proxy. 解析: Proxy其实是基于这样一种时常使用到的技术-某个对象直到它真正被使用到的时候才被初始化,在没有使用到的时候就暂时用Proxy作一个占位符.这个模式实现的要点就是Proxy和RealSubject都继承自Subject,这样保证了两个的接口都是一致的. 实现:

设计模式的解析和实现(C++)之九-Decorator模式

作用: 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator 模式相比生成子类更为灵活. UML结构图: 抽象基类: 1)Component:定义一个对象接口,可以为这个接口动态的添加职责. 2)Decorator:维持一个指向Component的指针,并且有一个和Component一致的接口函数.

云计算设计模式(二十二)——静态内容托管模式

云计算设计模式(二十二)--静态内容托管模式 部署静态内容到一个基于云的存储服务,可以直接向客户提供这些.这个模式可以减少潜在的昂贵的计算实例的需求. 景和问题 Web应用程序通常包括静态内容的一些元素.此静态内容可以包括HTML页面和诸如图像和可用到客户端的文件的其他资源,无论是作为一个HTML页的一部分(如嵌入式图像,样式表和客户端JavaScript文件)或作为单独的下载(如PDF文档). 尽管Web服务器以及调整通过有效的动态执行页代码和输出缓存优化的要求,他们仍然必须处理请求下载静态内

云计算设计模式(十七)——基于队列的负载均衡模式

云计算设计模式(十七)--基于队列的负载均衡模式 使用队列,作为一项任务,它调用才能顺利间歇重物,可能会以其他方式导致失败的服务或任务超时服务之间的缓冲区.这个模式可以帮助最小化峰中的可用性和响应需求为任务和服务的影响. 背景和问题 许多解决方案在云中涉及运行调用服务的任务.在这种环境下,如果一个服务进行间歇重物,它可能会导致性能或可靠性问题 一个服务可以是一个组件,它是相同的溶液作为利用它的任务的一部分,或者它可以是第三方服务提供访问经常使用的资源,如高速缓存或存储服务.如果相同的服务是由多个

设计模式的解析和实现(C++)之二十一-完结篇

一个月下来,把常见的20个设计模式好好复习并且逐个用C++实现了一遍,收获还是很大的,很多东西看上去明白了但是真正动手去做的时候发现其实还是不明白--我深知这个道理,于是不敢怠慢,不敢写什么所谓的解释原理的伪代码,不敢说所谓的"知道原理就可以了"....因为我知道,我还还没有资格说这个话,至少对于设计模式而言我还是一个初学者,唯有踏实和实干才能慢慢的掌握到知识. 在我学习设计模式的过程中,觉得造成理解困难的主要是以下几点,谈一下自己的体会,希望对他人有帮助,不要走上我的老路上,毕竟我花

设计模式的解析和实现(C++)之十八-Iterator模式

作用: 提供一种方法顺序访问一个聚合对象中各个元素,,而又不需暴露该对象的内部表示. UML结构图: 解析: Iterator几乎是大部分人在初学C++的时候就无意之中接触到的第一种设计模式,因为在STL之中,所有的容器类都有与之相关的迭代器.以前初学STL的时候,时常在看到讲述迭代器作用的时候是这么说的:提供一种方式,使得算法和容器可以独立的变化,而且在访问容器对象的时候不必暴露容器的内部细节,具体是怎么做到这一点的呢?在STL的实现中,所有的迭代器(Iterator)都必须遵照一套规范,这套

设计模式的解析和实现(C++)之一-Factory模式

作用: 定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method 使一个类的实例化延迟到其子类. UML结构图: 抽象基类: 1)Product:创建出来的对象的抽象基类. 2)Factory创建对象的工厂方法的抽象基类. 接口函数: 1)Creator::FactoryMethod:纯虚函数,由派生类实现,创建出对应的Product. 解析: 在这个模式中,有两个抽象基类,一个是Product为创建出来的对象的抽象基类,一个是Factory是工厂的抽象基类,在互相协作