模板方法模式

[url]http://dev.yesky.com/325/2061825.shtml[/url]
[url]http://zh.wikipedia.org/wiki/%E6%A8%A1%E6%9D%BF%E6%96%B9%E6%B3%95[/url]

[img]http://dl.iteye.com/upload/attachment/465325/be7856ce-dc74-3569-b803-239c4dcf42d8.jpg[/img]

四、适用情况

  根据上面对定义的分析,以及例子的说明,可以看出模板方法适用于以下情况:

  1) 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。

  2) 各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。其实这可以说是一种好的编码习惯了。

  3) 控制子类扩展。模板方法只在特定点调用操作,这样就只允许在这些点进行扩展。比如上面runBare()方法就只在runTest前面适用setUp方法。如果你不愿子类来修改你的模板方法定义的框架,你可以采用两种方式来做:一是在API中不体现出你的模板方法;二、将你的模板方法置为final就可以了。

  可以看出,使用模板方法模式可以将代码的公共行为提取出来,达到复用的目的。而且,在模板方法模式中,是由父类的模板方法来控制子类中的具体实现。这样你在实现子类的时候,根本不需要对业务流程有太多的了解。

-----------------------------

模板方法模式定义了一个算法的步骤,并允许次类别为一个或多个步骤提供其实践方式。让次类别在不改变算法架构的情况下,重新定义算法中的某些步骤。在软件工程中,它是一种软件设计模式,和C++模板没有关连。

[编辑] 用法
模板方法模式多用在:

某些类别的算法中,实做了相同的方法,造成程式码的重复。
控制次类别必须遵守的一些事项。
...
[编辑] 用例(Java)
 
/**
* An abstract class that is common to several games in
* which players play against the others, but only one is
* playing at a given time.
*/

abstract class Game {

private int playersCount;

abstract void initializeGame();

abstract void makePlay(int player);

abstract boolean endOfGame();

abstract void printWinner();

/* A template method : */
final void playOneGame(int playersCount) {
this.playersCount = playersCount;
initializeGame();
int j = 0;
while (!endOfGame()){
makePlay(j);
j = (j + 1) % playersCount;
}
printWinner();
}
}

//Now we can extend this class in order to implement actual games:

class Monopoly extends Game {

/* Implementation of necessary concrete methods */

void initializeGame() {
// ...
}

void makePlay(int player) {
// ...
}

boolean endOfGame() {
// ...
}

void printWinner() {
// ...
}

/* Specific declarations for the Monopoly game. */

// ...

}

class Chess extends Game {

/* Implementation of necessary concrete methods */

void initializeGame() {
// ...
}

void makePlay(int player) {
// ...
}

boolean endOfGame() {
// ...
}

void printWinner() {
// ...
}

/* Specific declarations for the chess game. */

// ...

}
怀旧党必备!用iPhone4s重温iOS6的保姆级教程(含游戏资源包) 本文提供了一份详细的iPhone4s降级至iOS6.1.3的保姆级教程,包括设备准备、越狱操作、系统降级及资源优化全流程。通过自制固件和越狱工具,用户可以重温经典的拟物化设计和流畅体验,同时获取经典游戏资源包,打造复古游戏神器。 阅读详情

相关推荐

Unity3D实战:5分钟搞定RTSP监控视频流播放(附完整代码)

本文详细介绍了如何在Unity3D中快速实现低延迟RTSP监控视频流播放,提供完整代码和优化方案。通过Video Player组件和FFmpeg集成,开发者可以轻松应对智能家居和安防监控领域的实时视频流挑战,显著降低延迟并提升性能。

weixin_29015051的博客 587

模板方法模式介绍

模板方法是在操作中定义算法的框架,将一些步骤推迟到子类中。模板方法让子类在不改变算法结构的情况下重新定义算法的某些步骤。模板方法中的算法可以理解为广义上的业务逻辑,并不是特指某一个实际的算法。定义中所说的算法的框架就是模板,包含算法框架的方法就是模板方法。模板方法模式是一种基于继承的代码复用技术,它是一种类行为模式。模板方法模式其结构中只存在父类与子类之间的继承关系。今天我们就来介绍下模板方法模式。

qq_25409421的博客 1619

SIMPLIS实战:从零构建理想BUCK电路,精准计算与POP稳态分析

本文详细介绍了如何使用SIMPLIS软件从零开始构建并仿真一个理想的BUCK降压电路。通过设定关键参数、计算理想器件值,并搭建仿真模型,文章重点演示了暂态仿真以观察电路上电过程,并深入讲解了高效的POP(周期性工作点)稳态分析技术,帮助工程师快速验证设计、评估稳态性能,从而加速电源设计迭代。

weixin_29165465的博客 392

C++模板方法模式

C++模板方法模式

qqrrjj2011的博客 1522

Python 映射函数map()详解

Python 映射函数map()详解

分享我的点点滴滴,在成长路上与你同行! 2139

ESP32驱动GC9A01圆形屏实战:Arduino平台LVGL移植与图像显示优化

本文详细介绍了在Arduino平台上使用ESP32驱动GC9A01圆形屏的实战指南,包括硬件连接、LVGL移植与图像显示优化。通过SPI配置、LVGL库安装和双缓冲机制等技巧,帮助开发者快速实现高效显示效果,适用于智能家居控制面板等应用场景。

weixin_29182481的博客 734

【设计模式十三之模板方法模式】模板方法模式详解

Adapter Pattern适配器模式细说适配器模式细说适配器模式 细说适配器模式 提示: 博主:章飞 _906285288的博客 博客地址:http://blog.youkuaiyun.com/qq_29924041 细说适配器模式 ...

章飞 _906285288的博客 606

Eclipse在Mac上报错JNI_CreateJavaVM?可能是你的JDK架构搞错了(附Adoptium JDK下载指南)

本文深入解析了Mac(尤其是Apple Silicon芯片)上Eclipse启动时出现“JNI_CreateJavaVM”错误的根本原因,即JDK架构(aarch64与x86_64)不匹配。文章提供了详细的诊断步骤,并推荐通过下载并配置Eclipse Adoptium提供的aarch64版本JDK来彻底解决问题,同时附上清晰的配置指南。

weixin_29065659的博客 321

模板方法模式详解

本文来说下模板方法模式 文章目录概述 概述 在程序开发中,经常会遇到这种情况:某个方法要实现的算法需要多个步骤,但其中有一些步骤是固定不变的,而另一些步骤则是不固定的。为了提高代码的可扩展性和可维护性,模板方法模式在这种场景下就派上了用场。 ...

wh柒八九的博客 1061

强化学习(Reinforcement Learning)与动态系统控制方法

一个具体的 RBC 的例子是自动驾驶汽车中的交通规则。在训练过程中,代理通过与环境交互获取奖励信号,并学习如何在某个状态下采取最佳的行动,以最大化长期的累积奖励。在化工过程中,通过对生产过程中的温度、压力、流量等参数的控制来实现产品的质量和产量的提高。需要注意的是,以上代码只是一个简单的示例,实际的 MPC 系统可能会更加复杂,并包含更多的模型预测和控制算法来实现更复杂的控制任务。需要注意的是,以上代码只是一个简单的示例,实际的自动驾驶汽车系统可能会更加复杂,并包含更多的规则和条件来确保安全行驶。

AI天才研究院 4062

innovus:NRDB-2276 special net route layer与NanoRouteMode route layer冲突问题解决方法

NanoRouteMode中设置绕线层次2-6,但是被动到的special net有8-11的preferred route layer,这个层次可能是create_route_type+set_ccopt_property -net_type 定义的。二者绕线层次范围有冲突,导致在调整过这条net后再绕线就会提示失败。然后再下route_design 等route命令去绕别的net。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 1099

Java设计模式之模板方法模式

模板方法模式 1. 简介 模板方法模式又称模板模式。指在一个抽象类中定义了使用它的方法的模板,子类可以按需实现某些方法,但是方法的执行还是按照抽象类中定义的顺序【模板】进行。 换言之,模板方法模式规定了一个操作的算法骨架,而部分细节实现则可以延迟到子类实现。该模式在保证算法骨架的不变性的同时,为其中的细节实现提供了可变性。 该模式属于行为型模式。 2.场景设定 豆浆制作有固定的步骤:选材==》添加配料==》浸泡==》放到豆浆机打碎。 除了添加配料在不同口味豆浆中的操作不一样外,其他步骤在每次制作

weixin_42948935的博客 742

无人机正射影像DOM孔洞修补的另一种方法并调整影像色差(附GlobalMapper24安装包(中文注册版))

之前介绍了用GlobalMapper联合PhotoShop对无人机正射影像DOM进行破洞修补,但是ps修图非常耗时,需要耐心和足够的细心。对于大面积的水域空洞,纹理特征都差不多,没必要修补得那么细致入微,本文介绍另一种直接在Global Mapper中快速修补大面积水域空洞的方法。 一、Global Mapper中检查数据 二、使用“数字化”工具,绘制需要补洞的多边形区域 三、导出绘制好的矢量区域 四、打开影像下载软件,选择影像图源 五、下载影像 六、调整影像的色差 七、合并影像并输出 八、检查结果数据

从地图看世界的专栏 1548

第 16 章 模板方法模式

第 16 章 模板方法模式 1、豆浆制作问题 编写制作豆浆的程序, 说明如下: 制作豆浆的流程:选材—>添加配料—>浸泡—>放到豆浆机打碎 通过添加不同的配料, 可以制作出不同口味的豆浆 选材、 浸泡和放到豆浆机打碎这几个步骤对于制作每种口味的豆浆都是一样的 请使用模板方法模式完成 (说明:因为模板方法模式,比较简单,很容易就想到这个方案, 因此就直接使用,不再使用传统的方案来引出模板方法模式) 2、模板方法模式基本介绍 模板方法模式(Template Method Patter

Oneby的博客 525

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

设计模式之模板方法模式

模板方法模式1.简要概述2.模式结构3.实现代码4.优点好处5.缺点弊端6.应用场景7.应用示例 1.简要概述 模板方法模式也叫作模板模式,属于行为型设计模式。 模板方法模式定义了一个操作中的算法骨架,并将一些特殊的步骤延迟到子类中实现。 模板方法模式的核心思想,就是在父类中定义了一个算法的框架,允许子类在不修改结构的情况下重写算法的特定步骤,以完成不同的需求。 模板方法模式中,也可以定义钩子方法,钩子方法可以对其他方法进行约束,通常返回一个boolean类型的标识,用来判断是否执行某一个基本方法,钩子方

ProChick's Blog 1226

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

[垃圾桶]Java 模板方法模式

本文综述模板方法模式。如果模板方法中只有一个可变的部分,模板方法模式还原为策略模式。因此模板方法模式可以视为策略模式的简单推论:可变部分由一到多。

yqj2065的博客 1666
上一篇: Java bit, byte, 基本数据类型
下一篇: 2011年 VBScript相关
ap0406708
博客等级 码龄20年 4粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值