`
cakin24
  • 浏览: 1398521 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

模板方法模式——每日的生活行为

阅读更多

一模式定义

模板方法模式:定义一个操作中的算法骨架,而将一些实现步骤延迟到子类当中。模板方法使得子类在不改变算法结构的情况下,重新定义算法中的某些步骤。

 

二模式举例

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当需要控制子类扩展的时候。模板方法在特定点调用钩子操作,这样只允许在某些点进行扩展。

 

五模板方法静态类图


 

  • 大小: 117 KB
  • 大小: 81.6 KB
  • 大小: 110.1 KB
1
1
分享到:
评论

相关推荐

    大数据 大营销——互联网时代大数据营销PPT模板.pptx

    通过云计算中心的强大处理能力,如拥有3个主机房、500余台服务器,每日处理10TB的数据,可以对5亿网民的行为数据进行深入分析。ATLAS云图不仅能够可视化这些数据,还能够通过实时计算、跨网跨平台汇聚、用户行为分析...

    PHP实例开发源码——PHP悬赏猫悬赏兔赏金赚每日任务刷单平台源码.zip

    该压缩包文件“PHP实例开发源码——PHP悬赏猫悬赏兔赏金赚每日任务刷单平台源码.zip”包含了一个基于PHP语言构建的悬赏任务平台的完整源代码。这种类型的平台通常用于在线任务发布,用户可以完成任务来赚取赏金,...

    大数据大营销——互联网时代大数据营销PPT模板.pptx

    这个PPT模板共18页,涵盖了从理论基础到实际应用的多个方面。 首先,我们生活在一个万物互联网的时代,原子与比特交织,信息无处不在。这种环境下,以广告为经济基础的免费互联网模式在中国特别盛行。免费服务的...

    李践——行动日志 相关表格

    综上所述,"李践——行动日志相关表格"不仅是个人提升生产力的工具,更是一种生活的哲学。它鼓励我们将日常生活中的每一部分都纳入自我管理的范畴,将每一项活动都视为实现个人价值和目标的步骤。通过日复一日地坚持...

    C++超市管理源代码

    1. **封装**:C++的封装机制允许我们将数据和操作这些数据的方法绑定在一起,形成一个独立的实体——类。在超市管理项目中,可能会有商品类(Product)、顾客类(Customer)和收银员类(Cashier)等,每个类都有其...

    敏捷开发官方文档

    本官方文档将深入探讨敏捷开发的核心理念、原则和实践,帮助读者理解和应用这一高效的工作模式。 1. 敏捷宣言与价值观 敏捷开发的基石是2001年发布的敏捷宣言,它强调了四个核心价值:个体和互动高于流程和工具,可...

    理财助手--电子记账簿

    理财助手——电子记账簿是一种高效管理个人财务的工具,尤其适合那些经常面临“月光”困扰的年轻人。这个工具的核心功能在于提供一个清晰、便捷的方式来记录每一笔收入和支出,以便用户更好地理解自己的消费习惯,...

    产品经理培训

    - **用户角色定义:** 明确角色的基本信息、行为模式和动机等。 **需求分析与管理** - **需求分类:** 区分功能性需求和非功能性需求。 - **获取需求:** 通过访谈、问卷调查等多种方式收集用户反馈。 - **记录...

    KDevelop User Manual

    - **通过svn获取每日快照**:说明如何从svn获取KDevelop的每日快照。 - **A.2 KDevelop要求**:列出KDevelop的系统要求。 - **A.3 KDevelop编译和安装** - **初步步骤**:介绍编译前的准备工作。 - **编译...

    网店推广之核心工具

    本文将详细解析其中的关键工具——淘宝直通车,并介绍其在网店推广中的应用。 1. **淘宝直通车**是淘宝平台推出的一种付费广告工具,通过关键词竞价的方式,让商品在搜索结果中获得更靠前的展示位置,从而吸引更多...

    创业计划书-电子商务-小兔鲜生

    **电子商务创业计划书——以“小兔鲜生”为例** 电子商务(E-commerce)是指通过互联网进行的商品和服务交易,它已经成为21世纪商业活动的重要组成部分。本篇创业计划书以“小兔鲜生”为实例,深入探讨如何在电商...

    手机微信积分兑换商城H5.zip

    本文将深入探讨一个基于H5技术的手机微信积分兑换商城的实现,以及如何通过这种模式提升用户粘性。首先,我们要理解的是,“手机微信积分兑换商城H5.zip”这个项目的核心——利用HTML5技术构建的移动端积分商城,其...

    ASP.NET某店POS积分管理系统-积分实绩更新及销售状况统计.zip

    在"ASP.NET某店POS积分管理系统——积分实绩更新及销售状况统计"这个项目中,我们可以推测这是一个针对零售店铺(POS,Point of Sale)的系统,它集成了积分管理和销售数据统计的功能。 1. **积分实绩更新**: 在...

Global site tag (gtag.js) - Google Analytics