从目的来看

  • 创建型(Creational)模式:将对象的部分创建工作 延迟到子对象类或者其他对象,从而应对需求变化为对象创建具体实现类型引来的冲击。
  • 结构性(Structural)模式:通过类继承或者对象组合获得灵活的类结构,从而应对需求变化为对象的结构带来的冲击。
  • 行为型(Behavioral 模式):通过类继承和对象组合来明确类与对象的责任,从而应对需求变化为多个交互对象的冲击

从范围来看:

  • 类模型处理类和子类的动态关系
  • 对象模式处理对象间的动态关系

从封装变化角度对模式分类

重构的关键技法

  • 静态 → 动态
  • 早绑定 → 晚绑定
  • 继承 → 组合
  • 编译时依赖 → 运行时依赖
  • 紧耦合 → 松耦合

“组件协作”模式

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

  典型模型:

  • Template Method
  • Stategy
  • Observer / Event

Template Method

  动机(Motivation):

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

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

Code

常用的书写代码的方式

Library.cpp

//程序库开发人员
class Library {
public:void Step1(){//...}void Step2(){//...}void Step3(){//...}
};

Application.cpp

//应用程序开发人员
class Application {
public:bool Step2(){//...}void Step4() {//...}
};int main()
{Library lib();Application app();lib.step1();if (app.Step2()) {lib.Step3;}for (int i = 0; i < 4; i++){app.Step();}lib.Step5();
} 

使用Template Methed的代码

Library.cpp

class Library {
public://稳定 template methodvoid Ren() {Step
1
(); if (Step2()) { //支持变化 ==>虚函数的多态 Step3(); } for (int i = 0; i < 4; i++) { Step4(); //支持变化 ==>虚函数的多态 } Step5(); } virtual ~Library(){} protected: void Step1() { //稳定 //... } void Step2() //稳定 { //... } void Step3() { //稳定 //... } virtual bool Step2()=0;//变化 virtual bool Step4()=0;//变化 };

 APPlication.cpp

//应用程序开发人员
class Application: public Library {
protected:virtual bool Step2() {//子类重写实现}virtual bool Step3() {//子类重写实现}
};int main()
{Library* pLib = new Application();pLib->run();delete pLib;
} 

 

模式定义

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

UML图

转载于:https://www.cnblogs.com/malloc1free/p/11087999.html

Template methed相关推荐

  1. Effective C++:改善程序与设计的55个具体做法

    Effective C++:改善程序与设计的55个具体做法 二.构造/析构/赋值运算 05 Know what functions C++ silently writes and calls. 06 ...

  2. 微信小程序模板template

    上面是官方的讲解, 主要是方便在不同的地方调用. 下面自己说下使用, 先创建一个模板名字是自己随便取的, 在template.wxml中填写模板 最外层用template标签 设置一个name属性 & ...

  3. C++中模板template typename T

    template <typename Dtype>. 网上解释的非常多,觉得比较啰嗦,其实就是一个类型模板. 比如我们要计算两个数的加法,针对不同类型可能需要设计不同类型的函数,那么tem ...

  4. 让你爽到飞起的【懒人插件AutoScssStruct4Vue】VSCode根据template的标签目录一键生成SCSS/LESS结构,敏捷开发必备插件!!!

    Ctrl+Shift+X 搜索AutoScssStruct4Vue   如上图直接右键-autoScssStruct(你都不需要聚焦到template节点) 直接就给你妥妥的把SCSS代码写好了,如果 ...

  5. ue4商城资源 Car Configurator Template 汽车配置器模板

    ue4商城资源 Car Configurator Template 汽车配置器模板 ue4商城资源 Car Configurator Template 汽车配置器模板 Unreal Engine虚幻游 ...

  6. C++ template

    (转自http://www.cnblogs.com/gw811/archive/2012/10/25/2738929.html) C++模板 模板是C++支持参数化多态的工具,使用模板可以使用户为类或 ...

  7. 使用Repeater的Template

    .NET FX提供了一个方法,就是使用Template来在程序运行时对Repeater的显示进行控制. 这里我就不多说了,可以去看MSDN中的相关资料.(嘿嘿,其实我也没搞多少 ).. 其实主要是pr ...

  8. 设计模式之模板方法模式(Template Method)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  9. 微信小程序模块化开发 include与模板开发 template

    微信小程序开发交流qq群   173683895    承接微信小程序开发.扫码加微信. 正文: 1. include  是引用整个wxml文件,我通常会配合js,css一起使用: 使用场景,需要封装 ...

最新文章

  1. Centos8 安装并使用Ansible(一)
  2. PCA和白化练习之处理图像
  3. android 图片加载库 Glide 的使用介绍
  4. java主类与源代码名称_java 获取操作系统名称 附源代码
  5. 第十四章:Java_网络编程
  6. Python的程序结构[4] - 函数/Function[2] - 匿名函数
  7. python变量类型之间转换_【Python】Python 变量类型(变量赋值,数据类型,数据转换)...
  8. ppt课堂流程图_4个超实用的PPT制作技巧:开学提升备课质量,资深老师都在用
  9. matlab的v带优化设计,基于遗传算法及MATLAB的V带传动优化设计
  10. Swift数据类型简介
  11. /etc/passwd,/etc/shadow文件详解,及密码复杂度设置
  12. 美啦:从工具到美妆共享经济平台的豹变
  13. xxm php,XXM个人知识管理工具 v6.0.5
  14. 知晓云深坑:数据修改返回401解决办法
  15. js - JavaScript
  16. angular2+ 常用链接
  17. 【方法】如何使用DeepMask和SharpMask
  18. 方言APP系统开发详情
  19. 系统漏洞修复(360 网管版)
  20. 数字藏品交易平台 nft数字藏品交易平台 数字藏品平台

热门文章

  1. HDU 2282 Chocolate (最小费用最大流)
  2. java comparable Comparator 区别
  3. GPM - 多语言实现视频
  4. Struts编程心得
  5. 线程安全与锁优化(思维导图)
  6. 59.进程的三种状态,以及之间转换的过程
  7. 官方消息:微软再次提醒IE浏览器将于6月15日停止支持
  8. 甲骨文正式发布Java 14(Oracle JDK 14),下载下来尝尝鲜~~~
  9. 英国皇家学会院士樊文飞:把大数据变小,突破企业资源限制
  10. html实现照片添加功能,HTML5 Canvas调用手机拍照功能实现图片上传功能(图文详解上篇)...