设计模式 笔记 模版方法模式 Template Method
//---------------------------15/04/28----------------------------
//TemplateMethod 模版方法模式----类行为型模式
/*
1:意图:
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变
一个算法的结构即可重定义该算法的某些特定步骤。
2:动机:
3:适用性:
1>一次性实现算法的不变的部分,并将可变的行为留给子类来实现。
2>各子类中的公共行为应被提取出来并集中到一个公共父类中以避免代码重复。
3>控制子类的扩展。
4:结构:
AbstractClass:
TemplateMethod()
{ ... //这些...的地方是固定的,子类无权改变
PrimitiveOperation1()
...
PrimitiveOperation2()
...
}
PrimitiveOperation1
PrimitiveOperation2
|
|
|
ConcreteClass:
PrimitiveOperation1()
PrimitiveOperation2() //可重新实现的两个类
5:参与者:
1>AbstractClass:
1)定义抽象的原语操作,具体的子类将重新定义它们以实现一个算法的各步骤。
2)实现一个模板方法,定义一个算法的骨架。该模版不仅调用原语操作,也调用定义在AbstractClass
或其他对象中的操作。
2>ConcreteClass:
实现原语操作以完成算法中与特定子类相关的步骤。
6:协作:
ConcreteClass靠AbstractClass来实现算法中不变的步骤。
7:效果:
1>具体操作。
2>具体的AbstractClass的操作
3>原语操作
4>Factory Method
5>钩子操作。它提供了缺省的行为,子类可以在必要时进行扩展。
要注意什么是原语操作(pure virtual函数)什么事钩子操作(有默认实现的virtual函数)
8:实现:
1>使用C++访问控制:
原语操作可以被定义为保护成员。这保证它们只可被模版方法调用(其实也可以定义为private成员,因为
子类需要做的只是重新实现定义,而不是去使用)。原语操作必须是纯虚函数,模版方法自身可以定义为
非虚成员函数。
2>尽量减少原语操作:
定义模板方法的一个重要目的就是尽量减少一个子类具体实现该算法时必须重定义的那些原语操作的数目。
3>命名约定:
可以给必须重定义的操作加上前缀以识别他们。
9:代码示例: */
//假设MyView继承自View DoDisplay就是钩子操作,因为DoDisplay需要一个默认实现
void View::Display()
{
//设置焦点才能显示东西
SetFocus();
//子类可重定义的操作
DoDisplay();
//最后把焦点移除
ResetFocus();
}
void view::DoDisplay() {}
void MyView::DoDisplay()
{
//render the view's contents
//做一些自己想做的事,随便显示什么东西都可以
}
设计模式 笔记 模版方法模式 Template Method的更多相关文章
- 模版方法模式(Template Method)
1.概念 在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板.它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行.这种类型的设计模式属于行为型 ...
- .NET设计模式(16):模版方法(Template Method)(转)
摘要:Template Method模式是比较简单的设计模式之一,但它却是代码复用的一项基本的技术,在类库中尤其重要. 主要内容 1.概述 2.Template Method解说 3..NET中的Te ...
- 设计模式 ( 十九 ) 模板方法模式Template method(类行为型)
设计模式 ( 十九 ) 模板方法模式Template method(类行为型) 1.概述 在面向对象开发过程中,通常我们会遇到这样的一个问题:我们知道一个算法所需的关键步骤,并确定了这些步骤的执行 ...
- 乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern)
原文:乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pa ...
- 设计模式之模版方法模式(Template Method Pattern)
一.什么是模版方法模式? 首先,模版方法模式是用来封装算法骨架的,也就是算法流程 既然被称为模版,那么它肯定允许扩展类套用这个模版,为了应对变化,那么它也一定允许扩展类做一些改变 事实就是这样,模版方 ...
- 设计模式-03工厂方法模式(Factory Method Pattern)
插曲.简单工厂模式(Simple Factory Pattern) 介绍工厂方法模式之前,先来做一个铺垫,了解一下简单工厂模式,它不属于 GoF 的 23 种经典设计模式,它的缺点是增加新产品时会违背 ...
- JS常用的设计模式(10)——模版方法模式
模式方法是预先定义一组算法,先把算法的不变部分抽象到父类,再将另外一些可变的步骤延迟到子类去实现.听起来有点像工厂模式( 非前面说过的简单工厂模式 ). 最大的区别是,工厂模式的意图是根据子类的实现最 ...
- 【设计模式】工厂方法模式 Factory Method Pattern
在简单工厂模式中产品的创建统一在工厂类的静态工厂方法中创建,体现了面形对象的封装性,客户程序不需要知道产品产生的细节,也体现了面向对象的单一职责原则(SRP),这样在产品很少的情况下使用起来还是很方便 ...
- 二十四种设计模式:工厂方法模式(Factory Method Pattern)
工厂方法模式(Factory Method Pattern) 介绍定义一个用于创建对象的接口,让子类决定将哪一个类实例化.Factory Method使一个类的实例化延迟到其子类. 示例有SqlMes ...
随机推荐
- CSS| 颜色名
CSS 颜色名 所有浏览器都支持的颜色名. HTML 和 CSS 颜色规范中定义了 147 中颜色名(17 种标准颜色加 130 种其他颜色).下面的表格中列出了所有这些颜色,以及它们的十六进制值. ...
- .net core 入坑经验 - 1、await async
已经有些日子没学习新知识了,心血来潮想试试core有多大变化和跨平台运行 所以现在就开始捣鼓,然而由于是从.net 4.0直接"跃升"到.net core 以及 asp.net m ...
- [LOJ 2146][BZOJ 4873][Shoi2017]寿司餐厅
[LOJ 2146][BZOJ 4873][Shoi2017]寿司餐厅 题意 比较复杂放LOJ题面好了qaq... Kiana 最近喜欢到一家非常美味的寿司餐厅用餐. 每天晚上,这家餐厅都会按顺序提供 ...
- 阿里八八Alpha阶段Scrum(7/12)
今日进度 叶文滔: Andriod Studio新版打开旧版项目存在兼容性问题,仍在寻求解决办法 王国超: 今天还是在调bug,真机运行总是闪退 俞鋆: 正在学习api制作和相关的文档编写,研究了一些 ...
- Windows2008 Server r2 64位显示桌面图标的方法
点击桌面左下方的开始菜单,在搜索框中输入“icon”,如下图所示: 点击:显示或隐藏桌面上的通用图标,然后弹出如下图: 应用并确定即可!
- C#中的事件(event)处理机制
委托 语法 [访问修饰符] delegate 返回类型 委托名(); 委托的特点 类似于C++函数指针,但它是类型安全的:委托允许将方法作为参数进行传递:委托可用于定义回调方法:委托可以链接在一起:如 ...
- pip安装python模块遇到一直出现retrying的问题
最近安装python模块,遇到这样的一个问题如图所示: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status= ...
- 详解Web请求中的DNS域名解析
当我们打开浏览器,输入一个URL去请求我们需要的资源,但是URL是需要解析成对应的IP地址才能与远程主机建立连接,如何将URL解析成IP就是DNS的工作范畴,即使作为开发人员,这个过程我们也感觉不到, ...
- php header函数导出excel表格
推荐一个除了用PHPExcel导出表格之外的另外一种比较简单不需要引入类文件的表格导入方法——header()导出excel表格. 导出表格的步骤封装成了方法,以便于重复使用,代码如下: /** * ...
- linux 的常用命令---------第三阶段
用户管理 为什么需要用户? 答:linux是一个多用户系统 权限管理(使之权限最小化) 用户:它是对系统中的资源做归属的 : 用户组:在用户组中包含一个或者多个用户,每个用户都同时拥有用户组的权限. ...