一模式定义
模板方法模式:定义一个操作中的算法骨架,而将一些实现步骤延迟到子类当中。模板方法使得子类在不改变算法结构的情况下,重新定义算法中的某些步骤。
二模式举例
1模式分析
我们借用每日生活行为来说明这一模式。
2模板方法模式静态类图
3代码示例
3.1建立算法骨架一AbstractPeople
package com.demo.template; /** * 抽象工人 * * @author * */ public abstract class AbstractPeople { /** * 起床方法 */ public void getUp() { System.out.println("起床..."); } /** * 抽象吃早餐方法 */ protected abstract void haveBreakfast(); /** * 抽象乘坐交通工具方法 */ protected abstract void transport(); /** * 工作方法 */ public void doWork() { System.out.println("工作..."); } /** * 模板方法(每天的行为) */ public final void dayLift() { System.out.println("===================="); // 起床 getUp(); // 早餐 haveBreakfast(); // 交通工具 transport(); // 工作 doWork(); System.out.println("===================="); } }
3.2具体工人A一PeopleA
package com.demo.template; /** * 工人A * * @author * */ public class PeopleA extends AbstractPeople { /** * 具体吃早餐方法 */ @Override protected void haveBreakfast() { System.out.println("A早餐吃三明治,喝牛奶..."); } /** * 具体乘坐交通工具方法 */ @Override protected void transport() { System.out.println("A开私家车上班..."); } }
3.3具体工人B一PeopleB
package com.demo.template; /** * 工人B * * @author * */ public class PeopleB extends AbstractPeople { /** * 具体吃早餐方法 */ @Override protected void haveBreakfast() { System.out.println("B早餐喝粥,吃小菜..."); } /** * 具体乘坐交通工具方法 */ @Override protected void transport() { System.out.println("B坐公共汽车上班..."); } }
3.4具体工人C一PeopleC
package com.demo.template; /** * 工人C * * @author * */ public class PeopleC extends AbstractPeople { /** * 具体吃早餐方法 */ @Override protected void haveBreakfast() { System.out.println("C早餐吃煎饼,喝豆浆..."); } /** * 具体乘坐交通工具方法 */ @Override protected void transport() { System.out.println("C坐地铁上班..."); } }
3.5客户端测试一Client
package com.demo; import com.demo.template.AbstractPeople; import com.demo.template.PeopleA; import com.demo.template.PeopleB; import com.demo.template.PeopleC; /** * 主应用程序 * * @author * */ public class Client { /** * @param args */ public static void main(String[] args) { // 创建A、B、C三个工人 AbstractPeople peopleA = new PeopleA(); AbstractPeople peopleB = new PeopleB(); AbstractPeople peopleC = new PeopleC(); // 展示三个工人每天的行为 peopleA.dayLift(); peopleB.dayLift(); peopleC.dayLift(); } }
4运行结果
====================
起床...
A早餐吃三明治,喝牛奶...
A开私家车上班...
工作...
====================
====================
起床...
B早餐喝粥,吃小菜...
B坐公共汽车上班...
工作...
====================
====================
起床...
C早餐吃煎饼,喝豆浆...
C坐地铁上班...
工作...
====================
三该模式设计原则
1"开-闭"原则
2好莱坞原则
四使用场合
1一次性实现一个算法的不变部分,井将可变的行为留给子类实现。
2各子类中具有公共行为的时候,应被提取出来并集中到一个公共父类以避免代码重复。
3当需要控制子类扩展的时候。模板方法在特定点调用钩子操作,这样只允许在某些点进行扩展。
五模板方法静态类图
相关推荐
通过云计算中心的强大处理能力,如拥有3个主机房、500余台服务器,每日处理10TB的数据,可以对5亿网民的行为数据进行深入分析。ATLAS云图不仅能够可视化这些数据,还能够通过实时计算、跨网跨平台汇聚、用户行为分析...
该压缩包文件“PHP实例开发源码——PHP悬赏猫悬赏兔赏金赚每日任务刷单平台源码.zip”包含了一个基于PHP语言构建的悬赏任务平台的完整源代码。这种类型的平台通常用于在线任务发布,用户可以完成任务来赚取赏金,...
这个PPT模板共18页,涵盖了从理论基础到实际应用的多个方面。 首先,我们生活在一个万物互联网的时代,原子与比特交织,信息无处不在。这种环境下,以广告为经济基础的免费互联网模式在中国特别盛行。免费服务的...
综上所述,"李践——行动日志相关表格"不仅是个人提升生产力的工具,更是一种生活的哲学。它鼓励我们将日常生活中的每一部分都纳入自我管理的范畴,将每一项活动都视为实现个人价值和目标的步骤。通过日复一日地坚持...
1. **封装**:C++的封装机制允许我们将数据和操作这些数据的方法绑定在一起,形成一个独立的实体——类。在超市管理项目中,可能会有商品类(Product)、顾客类(Customer)和收银员类(Cashier)等,每个类都有其...
本官方文档将深入探讨敏捷开发的核心理念、原则和实践,帮助读者理解和应用这一高效的工作模式。 1. 敏捷宣言与价值观 敏捷开发的基石是2001年发布的敏捷宣言,它强调了四个核心价值:个体和互动高于流程和工具,可...
理财助手——电子记账簿是一种高效管理个人财务的工具,尤其适合那些经常面临“月光”困扰的年轻人。这个工具的核心功能在于提供一个清晰、便捷的方式来记录每一笔收入和支出,以便用户更好地理解自己的消费习惯,...
- **用户角色定义:** 明确角色的基本信息、行为模式和动机等。 **需求分析与管理** - **需求分类:** 区分功能性需求和非功能性需求。 - **获取需求:** 通过访谈、问卷调查等多种方式收集用户反馈。 - **记录...
- **通过svn获取每日快照**:说明如何从svn获取KDevelop的每日快照。 - **A.2 KDevelop要求**:列出KDevelop的系统要求。 - **A.3 KDevelop编译和安装** - **初步步骤**:介绍编译前的准备工作。 - **编译...
本文将详细解析其中的关键工具——淘宝直通车,并介绍其在网店推广中的应用。 1. **淘宝直通车**是淘宝平台推出的一种付费广告工具,通过关键词竞价的方式,让商品在搜索结果中获得更靠前的展示位置,从而吸引更多...
**电子商务创业计划书——以“小兔鲜生”为例** 电子商务(E-commerce)是指通过互联网进行的商品和服务交易,它已经成为21世纪商业活动的重要组成部分。本篇创业计划书以“小兔鲜生”为实例,深入探讨如何在电商...
本文将深入探讨一个基于H5技术的手机微信积分兑换商城的实现,以及如何通过这种模式提升用户粘性。首先,我们要理解的是,“手机微信积分兑换商城H5.zip”这个项目的核心——利用HTML5技术构建的移动端积分商城,其...
在"ASP.NET某店POS积分管理系统——积分实绩更新及销售状况统计"这个项目中,我们可以推测这是一个针对零售店铺(POS,Point of Sale)的系统,它集成了积分管理和销售数据统计的功能。 1. **积分实绩更新**: 在...