




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java设计模式之模板方法模式 一 引子这是一个很简单的模式 却被非常广泛的使用 之所以简单是因为在这个模式中仅仅使用到了继承关系 继承关系由于自身的缺陷 被专家们扣上了 罪恶 的帽子 使用委派关系代替继承关系 尽量使用接口实现而不是抽象类继承 等等专家警告 让我们这些菜鸟对继承 另眼相看 其实 继承还是有很多自身的优点所在 只是被大家滥用的似乎缺点更加明显了 合理的利用继承关系 还是能对你的系统设计起到很好的作用的 而模板方法模式就是其中的一个使用范例 二 定义与结构GOF给模板方法 TemplateMethod 模式定义一个操作中的算法的骨架 而将一些步骤延迟到子类中 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 这里的算法的结构 可以理解为你根据需求设计出来的业务流程 特定的步骤就是指那些可能在内容上存在变数的环节 可以看出来 模板方法模式也是为了巧妙解决变化对系统带来的影响而设计的 使用模板方法使系统扩展性增强 最小化了变化对系统的影响 这一点 在下面的举例中可以很明显的看出来 来看下这个简单模式的结构吧 1 AbstractClass 抽象类 定义了一到多个的抽象方法 以供具体的子类来实现它们 而且还要实现一个模板方法 来定义一个算法的骨架 该模板方法不仅调用前面的抽象方法 也可以调用其他的操作 只要能完成自身的使命 2 ConcreteClass 具体类 实现父类中的抽象方法以完成算法中与特定子类相关的步骤 下面是模板方法模式的结构图 直接把 设计模式 上的图拿过来用下 三 举例还是在我刚刚分析完源码的JUnit中找个例子吧 JUnit中的TestCase以及它的子类就是一个模板方法模式的例子 在TestCase这个抽象类中将整个测试的流程设置好了 比如先执行Setup方法初始化测试前提 在运行测试方法 然后再TearDown来取消测试设置 但是你将在Setup TearDown里面作些什么呢 鬼才知道呢 因此 而这些步骤的具体实现都延迟到子类中去 也就是你实现的测试类中 来看下相关的源代码吧 这是TestCase中 执行测试的模板方法 你可以看到 里面正像前面定义中所说的那样 它制定了 算法 的框架 先执行setUp方法来做下初始化 然后执行测试方法 最后执行tearDown释放你得到的资源 publicvoidrunBare throwsThrowable setUp try runTest finally tearDown 这就是上面使用的两个方法 与定义中不同的是 这两个方法并没有被实现为抽象方法 而是两个空的无为方法 被称为钩子方法 这是因为在测试中 我们并不是必须要让测试程序使用这两个方法来初始化和释放资源的 如果是抽象方法 则子类们必须给它一个实现 不管用到用不到 这显然是不合理的 使用钩子方法 则你在需要的时候 可以在子类中重写这些方法 protectedvoidsetUp throwsException protectedvoidtearDown throwsException 四 适用情况根据上面对定义的分析 以及例子的说明 可以看出模板方法适用于以下情况 1 一次性实现一个算法的不变的部分 并将可变的行为留给子类来实现 2 各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复 其实这可以说是一种好的编码习惯了 3 控制子类扩展 模板方法只在特定点调用操作 这样就只允许在这些点进行扩展 比如上面runBare 方法就只在runTest前面适用setUp方法 如果你不愿子类来修改你的模板方法定义的框架 你可以采用两种方式来做 一是在API中不体现出你的模板方法 二 将你的模板方法置为final就可以了 更多资料java培训可以看出 使用模板方法模式可以
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国移动揭阳市2025秋招写作案例分析万能模板直接套用
- 中国联通山西地区2025秋招笔试题库含答案
- 嘉兴市中储粮2025秋招笔试性格测评题专练及答案
- 中国广电山东地区2025秋招笔试行测题库及答案网络优化与维护类
- 佳木斯市中石化2025秋招笔试模拟题含答案机械与动力工程岗
- 国家能源广州市2025秋招面试专业追问及参考采矿工程岗位
- 宜宾市中储粮2025秋招面试专业追问题库综合管理岗
- 汕头市中储粮2025秋招基建工程岗高频笔试题库含答案
- 伊春市中储粮2025秋招财务资产岗高频笔试题库含答案
- 中国广电漳州市2025秋招笔试行测题库及答案市场与服务类
- 渝22TS02 市政排水管道附属设施标准图集 DJBT50-159
- GB/T 18029.14-2012轮椅车第14部分:电动轮椅车和电动代步车动力和控制系统要求和测试方法
- GB/T 14339-2008化学纤维短纤维疵点试验方法
- 橡胶沥青路面在江苏公路上的应用研究
- GA/T 1439-2017法庭科学复印文件检验技术规程
- 初中数学知识点思维导图北师大版
- 药膳师理论考试题库及答案
- 惠普云教室用户操作手册
- 《护理实习手册》【范本模板】
- 油浸式变压器技术参数和要求
- 土石坝3D建造无人驾驶碾压新技术
评论
0/150
提交评论