模板模式Template Method

模板模式Template Method模板模式Template Method组件协作典型模式案例模式定义重要总结组件协作现代软件专业分工之后的第一个结果是“框架与应用程序的划分”,”组件协作”模式通过晚期绑定,来实现框架与应用程序之间的松耦合,是两者之间协作时常用的模式典型模式Template MethodStrategyObserver / Event动机在软件构造过程中,对某一项任务,它常常有稳定的的整体操作骨架,但各个子步骤 却有很多改变的需求,或者由于固有的原因,(比如框架和应用之间的关系)而无法和任务的整体结构同时

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

组件协作

现代软件专业分工之后的第一个结果是“框架与应用程序的划分”,”组件协作”模式通过晚期绑定,来实现框架与应用程序之间的松耦合,是两者之间协作时常用的模式

典型模式

  • Template Method
  • Strategy
  • Observer / Event

动机

在软件构造过程中,对某一项任务,它常常有稳定的的整体操作骨架,但各个子步骤 却有很多改变的需求,或者由于固有的原因,(比如框架和应用之间的关系)而无法和任务的整体结构同时实现

如何在确定稳定操作结构的前提下,来灵活应对各个子步骤的变化或晚期实现需求?

案例

使用模板方法前

//程序开发人员
class Library
{ 
   
private:
public:
    void step1(){ 
   
        //..
    }
    void step3(){ 
   
        //..
    }
    void step5(){ 
   
        //..
    }
};

//应用程序开发人员
class Application
{ 
   
public:
bool step2(){ 
   
    //..
}
bool step4(){ 
   
    //..
}
};

int main(){ 
   
    Library lib();
    Application app();

    lib.Step1();
    if(app.Step2()){ 
   
        lib.Step3();
    }
    for(int i = 0;i < 4;i ++){ 
   
        app.Step4();
    }

    lib.Step5();
}

使用模板方法后

//程序库开发人员
class Library
{ 
   
private:
public:
    //稳定 template method
    void Run(){ 
   
        Step1();
        if(Step2()){ 
       //支持变换==>虚函数的多态调用
            Step3();
        }
        for(int i = 0;i < 4;i ++){ 
   
            Step4();//支持变化//==>虚函数调用多态
        }
        Step5();
    }
    virtual ~Library(){ 
   };
protected:
    void Step1(){ 
   
        //稳定
        //..
    }
    void Step3(){ 
   
        //稳定
        //..
    }
    void Step5(){ 
   
        //稳定
        //..
    }
    virtual bool Step2() = 0;//变换
    virtual bool Step4() = 0;//变换
};


//应用程序开发人员
class Application
{ 
   
protected:
    virtual bool Step2(){ 
   
        //..子类重写
    }
    virtual bool Step4(){ 
   
        //..子类重写
    }
};

int main(){ 
   
    Library * Plib = new Application();
    lib-Run();
    delete Plib;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

模式定义

定义一个操作中的算法的骨架(稳定),而将一些步骤延迟(变化)到子类中。Template Method使得子类可以不改变(复用)一个算法的结构即可重定义(override重写)该算法的某些特定步骤

重要总结

  • Template Method模式是一种非常基础的设计模式,再面向对象系统中有大量的应用,它用最简洁的机制(虚函数的多态),为很多应用程序框架提供了灵活的扩展点,是代码复用方面的实现结构。
  • 除了可以灵活应对子步骤的变换外,“不要调用我,让我来调用你”的反向控制结构Template Method的典型应用
  • 在具体实现方面,被Template Method调用的虚方法可以实现,也可以没有任何实现(抽象方法,纯虚方法)一般设置他们为protected方法。

笔记

  • 扩展点:继承+虚函数就是扩展
  • 反向控制结构“不要调用我,让我来调用你” –> library调用用户代码 晚绑定
  • 函数指针也是晚绑定机制
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168515.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 数据结构算法常见面试考题及答案_数据结构和算法面试题

    数据结构算法常见面试考题及答案_数据结构和算法面试题(1)红黑树的了解(平衡树,二叉搜索树),使用场景把数据结构上几种树集中的讨论一下:1.AVLtree定义:最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(logn)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。节点的平衡因子是它的左子树的高度减去它的右子树的高度(有时相反)。…

    2022年9月29日
    5
  • linux的软连接命令(文件夹建立软连接)

    Linux命令之软连接详解。结合示例详细说明软链接的创建,同时给出如何正确删除一个软链接。

    2022年4月14日
    4.1K
  • 清除cookie的方法_js设置cookie

    清除cookie的方法_js设置cookieJavaScript是运行在客户端的脚本,因此一般是不能够设置Session的,因为Session是运行在服务器端的。而cookie是运行在客户端的,所以可以用JS来设置cookie.一:设置co

    2022年8月1日
    8
  • 深入浅出python学习

    深入浅出python学习最近开始自学python,网上找了本书《深入浅出python》个人感觉很好,图片很多,比较生动,让人印象深刻。昨天很快就看完了第一章,非常顺利。然而,今天看到发布那块开始出问题了。构建发布和安装的时候出问题那本书是在linux系统下运行,而我用的是windows10.折腾了老半天,得到以下结论:构建一个发布文件:linux:python3setup.pysdistwindow…

    2022年10月18日
    4
  • laravel 学习笔记blog后台

    laravel 学习笔记blog后台

    2021年10月24日
    53
  • Python读写excel表格的方法一

    Python读写excel表格的方法一

    2022年3月4日
    56

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号