Template methed
从目的来看
- 创建型(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相关推荐
- Effective C++:改善程序与设计的55个具体做法
Effective C++:改善程序与设计的55个具体做法 二.构造/析构/赋值运算 05 Know what functions C++ silently writes and calls. 06 ...
- 微信小程序模板template
上面是官方的讲解, 主要是方便在不同的地方调用. 下面自己说下使用, 先创建一个模板名字是自己随便取的, 在template.wxml中填写模板 最外层用template标签 设置一个name属性 & ...
- C++中模板template typename T
template <typename Dtype>. 网上解释的非常多,觉得比较啰嗦,其实就是一个类型模板. 比如我们要计算两个数的加法,针对不同类型可能需要设计不同类型的函数,那么tem ...
- 让你爽到飞起的【懒人插件AutoScssStruct4Vue】VSCode根据template的标签目录一键生成SCSS/LESS结构,敏捷开发必备插件!!!
Ctrl+Shift+X 搜索AutoScssStruct4Vue 如上图直接右键-autoScssStruct(你都不需要聚焦到template节点) 直接就给你妥妥的把SCSS代码写好了,如果 ...
- ue4商城资源 Car Configurator Template 汽车配置器模板
ue4商城资源 Car Configurator Template 汽车配置器模板 ue4商城资源 Car Configurator Template 汽车配置器模板 Unreal Engine虚幻游 ...
- C++ template
(转自http://www.cnblogs.com/gw811/archive/2012/10/25/2738929.html) C++模板 模板是C++支持参数化多态的工具,使用模板可以使用户为类或 ...
- 使用Repeater的Template
.NET FX提供了一个方法,就是使用Template来在程序运行时对Repeater的显示进行控制. 这里我就不多说了,可以去看MSDN中的相关资料.(嘿嘿,其实我也没搞多少 ).. 其实主要是pr ...
- 设计模式之模板方法模式(Template Method)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...
- 微信小程序模块化开发 include与模板开发 template
微信小程序开发交流qq群 173683895 承接微信小程序开发.扫码加微信. 正文: 1. include 是引用整个wxml文件,我通常会配合js,css一起使用: 使用场景,需要封装 ...
最新文章
- Centos8 安装并使用Ansible(一)
- PCA和白化练习之处理图像
- android 图片加载库 Glide 的使用介绍
- java主类与源代码名称_java 获取操作系统名称 附源代码
- 第十四章:Java_网络编程
- Python的程序结构[4] - 函数/Function[2] - 匿名函数
- python变量类型之间转换_【Python】Python 变量类型(变量赋值,数据类型,数据转换)...
- ppt课堂流程图_4个超实用的PPT制作技巧:开学提升备课质量,资深老师都在用
- matlab的v带优化设计,基于遗传算法及MATLAB的V带传动优化设计
- Swift数据类型简介
- /etc/passwd,/etc/shadow文件详解,及密码复杂度设置
- 美啦:从工具到美妆共享经济平台的豹变
- xxm php,XXM个人知识管理工具 v6.0.5
- 知晓云深坑:数据修改返回401解决办法
- js - JavaScript
- angular2+ 常用链接
- 【方法】如何使用DeepMask和SharpMask
- 方言APP系统开发详情
- 系统漏洞修复(360 网管版)
- 数字藏品交易平台 nft数字藏品交易平台 数字藏品平台
热门文章
- HDU 2282 Chocolate (最小费用最大流)
- java comparable Comparator 区别
- GPM - 多语言实现视频
- Struts编程心得
- 线程安全与锁优化(思维导图)
- 59.进程的三种状态,以及之间转换的过程
- 官方消息:微软再次提醒IE浏览器将于6月15日停止支持
- 甲骨文正式发布Java 14(Oracle JDK 14),下载下来尝尝鲜~~~
- 英国皇家学会院士樊文飞:把大数据变小,突破企业资源限制
- html实现照片添加功能,HTML5 Canvas调用手机拍照功能实现图片上传功能(图文详解上篇)...