模板方法和算法骨架

核心:父类提供数据的处理流程,而子类负责具体的环节的实现,必须具备相同的处理结构,就是算法骨架。

查看设计模式中的模板模式的时候,对于一个惯用的设计方案提供了如下的解决方案,尤其是如何处理当一些具体的实现过程不一样的思路。应用场景如下:

在整个框架中,所有方法的逻辑都是一样的,例如:

在所有的处理逻辑都是一样的情况下,父类提供了一个处理的框架,而子类针对处理的过程中的不同点,进行覆盖(在这里声明,麦盖和重载不了解)。

以下是处理的逻辑:采集信号  处理信号  发送信号 (其中处理接收的信号,可能是电信号,有可能是光信号等等,所以他们发送和接收的规则都是不一样的),但是有一点是相同的,他们必须在规定时间内收集足够多的数据返回,与此同时,处理信号的过程都是一样的,这样子我们就可以简单的编写代码如下,其中父类提供了实现逻辑的框架,而子类实现了具体的逻辑结构。

概要分析如下的结构:父类实现处理逻辑,子类必须实现基本的实现

class CSignal{
public:
    void Run()
    {
       RecvSignal();
       ProcessSigal();
       ReactorSignal();
    }
    virtual ~CSignal()
    {

    }

protected:
    virtual void RecvSignal()=0;
    void ProcessSigal()
    {
        cout<<"handle signal"<<endl;
    }
    virtual void ReactorSignal()=0;
};

class CLigntSigle:public CSignal
{
public:
    CLigntSigle()
    {
        cout<<"start to run light signal run "<<endl;
    }
     ~CLigntSigle()
    {
        cout<<"Finish to run light signal"<<endl;
    }

    void RecvSignal()
    {
        cout<<"recv light signal"<<endl;
    }
    void ReactorSignal()
    {
        cout<<"reactor light signal"<<endl;
    }
};

class CElectSigle:public CSignal
{
public:
    CElectSigle()
    {
        cout<<"start to run elect signal run"<<endl;
    }
    ~CElectSigle()
    {
        cout<<"Finish to run elect signal"<<endl;
    }

    void RecvSignal()
    {
        cout<<"recv elect signal"<<endl;
    }
    void ReactorSignal()
    {
        cout<<"reactor elect signal"<<endl;
    }
};

起哄应用到了继承,多态,当然多态只是一个可有可无的东西,但是在实际的应用中,我们需要保存对象的指针到一个数组中,如果不用多态保存基类的地址,可能需要一个联合体来解决存储的问题

时间: 2024-10-09 13:56:17

模板方法和算法骨架的相关文章

设计模式6(组合模式,模板方法,策略模式)

组合模式 将对象组合为"部分-整体"的层次结构,组合模式使得用户对单个对象和组合对象的使用统一的接口 关键在于抽象类的定义,为leaf 和composite提供了统一的接口 操作接口 添加leaf 删除leaf 获取特定leaf 装饰者模式 可以将装饰者支持组合模式需要的一些功能       享元模式   当组合模式中出现大量相似的组件对象并且状态可以从组件对象分离     迭代模式         访问者 在不修改原有对象结构的基础上为基添加新功能       职责链模式 其实现请求

《大话设计模式》的一些总结

厌倦了零零散散的文章分布,书评写到豆瓣.技术写到网易什么的,这样自己很容易遗忘,懒得去回顾,慢慢得就懒得去思考和动笔了,所以我决定在此再加一个书评分类,以后看了书往这里写总结,虽然这个分类开得有点晚了,不过我觉得还是有用的,对将来的回顾知识点并且能对自己掌握的知识能有直观的了解.大数据能比自己更了解自己,那我觉得笔记也应该能让自己更清楚自己. OK,不再废话.这本书其实早就看过了,可是一直看得漫不尽心,所以总是不能看到最后,为了加深对面向对象思想的理解,提高自己编写代码的质量,我花了大概一周的时

(九)模板方法模式

  转载:http://www.cnblogs.com/zuoxiaolong/p/pattern10.html 模板方法模式,这是一个在许多优秀的开源项目中LZ见的最多的一个设计模式,也是LZ觉得最为优秀的一个设计模式,所以这一章LZ会尽自己所能的去尽量将这个设计模式解释清楚. 模板方法模式,一般是为了统一子类的算法实现步骤,所使用的一种手段或者说是方式.它在父类中定义一系列算法的步骤,而将具体的实现都推迟到子类. 最典型的形式就是一个接口,一个抽象父类,父类中会有一系列的抽象方法,而在子类中

理解设计模式(模板方法)

模板方法模式,定义算法骨架及其执行顺序,延伸至子类实现算法逻辑. 模板方法.基本方法和钩子方法 基本方法:实现算法各步骤的逻辑 模板方法:组合所有基本方法,规定其顺序 钩子方法:决定如何整合各个算法步骤 根据实际环境的不同,算法逻辑会反生变化 使用钩子方法,来标记这些变化,随之改变算法的逻辑(主要改变是算法步骤执行与否和彼此间执行顺序) 特定环境 算法结构稳定,即若干类逻辑相似 相同逻辑部分可提取成父类基本方法,不同部分留给子类实现 按业务或环境不同,不同部分能够相应变化(钩子方法的不同实现,子

Java抽象类深入理解-----模板方法设计模式(Templete Method)

模板方法设计模式(Templete Method) 定义一个操作中的算法骨架,而将一些可变部分的实现延迟到子类中. 模板方法设计模式使得子类可以不改变一个算法的结构即可重新定义该算法某些特定的步骤. 1 import java.util.Random; 2 3 public class AbstractTest002 { 4 public static void main(String[] args) { 5 JudgeMent jm = new JudgeMent(); 6 jm.action

[设计模式]模板方法模式

1. 定义 定义了一个操作中的算法骨架,而将一些步骤延迟到子类中实现.模板方法使得子类可以不改变一个算法的结构而重定义该算法中某些特定的步骤. 2. 类图 AbstractClass:抽象类,用来定义算法骨架和原语操作,具体的子类通过重定义这些原语操作来实现一个算法的各个步骤,在这个类中,也可以提供原语的默认实现. ConcreteClass:具体实现类.用来实现算法骨架中的某些步骤,完成与特定子类的功能. 3. 示例 package com.jerry.designpattern; /** *

编程模式之模板方法模式(Template Method)

模板方法模式由两个角色组成:父类角色,子类角色. 父类角色:提供模板. 子类角色:为父类模板提供实现. 类图: JAVA代码: AbstractClass.java package com.templatemethod; public abstract class AbstractClass { /** * 定义了算法的骨架,即步骤 */ public void template() { this.method1(); this.method2(); this.method3(); } /**

设计模式学习笔记(十八:模板方法模式)

1.1概述 定义了一个操作中算法的骨架,而将一些步骤延迟到子类中.模板方法使子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤.这就是模板方法的定义. 类中的方法用以表明该类的实例所具有的行为,一个类可以有许多方法,而且类中的实例方法也可以调用该类中的其他若干个方法.在编写类的时候,可能需要将类的许多方法集成到一个实例方法中,即用一个实例方法封装若干个方法的调用,以表现一个算法的骨架,也就是说,调用该实例方法相当于按着一定顺序执行若干个方法. 例如,各类客运车站在安排乘客上车时都进行安全

第24章 行为型模式—模板方法模式

1. 模板方法模式(Template Method Pattern)的定义 (1)定义:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. (2)模板方法模式的结构和说明 ①AbstractClass:抽象类.用于定义算法骨架和抽象的原语操作,具体的子类通过重定义这些原语操作来实现一个算法的各个步骤.在这个类里面,还可以提供算法中通用的实现.此外,该类还实现了一个模板方法,它定义了算法的骨架.该模板方法不仅调用原语操作,