`
lvwenwen
  • 浏览: 955998 次
  • 性别: Icon_minigender_1
  • 来自: 魔都
社区版块
存档分类
最新评论

java设计模式之模板方法模式(行为模式 )

阅读更多
package com.createtype.desginpatterns.templatemethod;

/**
 * @author cbf4Life cbf4life@126.com I'm glad to share my knowledge with you
 *         all. Hummer Model是悍马车辆模型的意思,不是悍马美女车模
 */
public abstract class HummerModel {
	/*
	 * 首先,这个模型要能够被发动起来,别管是手摇发动,还是电力发动,反正 是要能够发动起来,那这个实现要在实现类里了
	 */
	protected abstract void start();

	// 能发动,那还要能停下来,那才是真本事
	protected abstract void stop();

	// 喇叭会出声音,是滴滴叫,还是哔哔叫
	protected abstract void alarm();

	// 引擎会轰隆隆的响,不响那是假的
	protected abstract void engineBoom();

	// 那模型应该会跑吧,别管是人推的,还是电力驱动,总之要会跑
	final public void run() {
		// 先发动汽车
		this.start();
		// 引擎开始轰鸣
		this.engineBoom();
		// 喇嘛想让它响就响,不想让它响就不响
		if (this.isAlarm()) {
			this.alarm();
		}
		// 到达目的地就停车
		this.stop();
	}

	// 钩子方法,默认喇叭是会响的
	protected boolean isAlarm() {
		return true;
	}
}
package com.createtype.desginpatterns.templatemethod;

/**
 * @author cbf4Life cbf4life@126.com I'm glad to share my knowledge with you
 *         all. H1和H2有什么差别,还真不知道,真没接触过悍马
 */
public class HummerH2Model extends HummerModel {
	@Override
	protected void alarm() {
		System.out.println("悍马H2鸣笛...");
	}

	@Override
	protected void engineBoom() {
		System.out.println("悍马H2引擎声音是这样在...");
	}

	@Override
	protected void start() {
		System.out.println("悍马H2发动...");
	}

	@Override
	protected void stop() {
		System.out.println("悍马H1停车...");
	}

	// 默认没有喇叭的
	@Override
	protected boolean isAlarm() {
		return false;
	}
}
package com.createtype.desginpatterns.templatemethod;

/**
 * @author cbf4Life cbf4life@126.com I'm glad to share my knowledge with you
 *         all. 悍马车是每个越野者的最爱,其中H1最接近军用系列
 */
public class HummerH1Model extends HummerModel {
	private boolean alarmFlag = true; // 是否要响喇叭

	@Override
	protected void alarm() {
		System.out.println("悍马H1鸣笛...");
	}

	@Override
	protected void engineBoom() {
		System.out.println("悍马H1引擎声音是这样在...");
	}

	@Override
	protected void start() {
		System.out.println("悍马H1发动...");
	}

	@Override
	protected void stop() {
		System.out.println("悍马H1停车...");
	}

	@Override
	protected boolean isAlarm() {
		return this.alarmFlag;
	}
	// 要不要响喇叭,是有客户的来决定的
	public void setAlarm(boolean isAlarm) {
		this.alarmFlag = isAlarm;
	}
}
package com.createtype.desginpatterns.templatemethod;

/**
 * @author cbf4Life cbf4life@126.com I'm glad to share my knowledge with you
 *         all. 客户开始使用这个模型
 */
public class Client {
	public static void main(String[] args) {
		// 客户开着H1型号,出去遛弯了
		HummerH1Model h1 = new HummerH1Model();
		h1.setAlarm(false);
		h1.run(); // 汽车跑起来了;
		// 客户开H2型号,出去玩耍了
//		HummerModel h2 = new HummerH2Model();
//		h2.run();
	}
}

 文章链接:http://sunnylocus.iteye.com/blog/216500javascript:mctmp(0);
模板方法模式:
1.那我们总结一下模板方法模式,模板方法模式就是在模板方法中按照一个的规则和顺序调用基本方法,
具体到我们上面那个例子就是run 方法按照规定的顺序(先调用start,然后再调用engineBoom,再调用
alarm,最后调用stop)调用本类的其他方法,并且由isAlarm 方法的返回值确定run 中的执行顺序变更,
2.其中TemplateMethod 就是模板方法,operation1 和operation2 就是基本方法,模板方法是通过汇总
或排序基本方法而产生的结果集。
3.作为模板的方法定义在父类(父类为抽象类),而方法定义使用抽象方法,实现抽象方法的是子类,要在子类实现方法,
才能决定具体的操作。如果在不同的子类执行不同实现就可以发展出不同的处理内容。
不过,无论在哪个子类执行任何一种实现,处理的大致流程都还是要依照父类制定的方式。

 

分享到:
评论

相关推荐

    Java设计模式之模板方法模式Java认证考试.pdf

    Java设计模式之模板方法模式Java认证考试 Java设计模式之模板方法模式是Java认证考试中的一种重要的设计模式,它通过使用继承关系来定义一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个...

    设计模式之模板方法模式

    模板方法模式是面向对象设计模式中的行为模式之一,它在Java等面向对象编程语言中有着广泛的应用。模板方法模式的主要思想是在一个抽象类中定义一个算法的骨架,而将一些步骤延迟到子类中实现。这样,子类可以重写...

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

    模板方法模式是面向对象设计模式中的行为模式之一,它在Java编程中有着广泛的应用。这种模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定...

    java设计模式之模板模式

    在Java设计模式之模板模式中,我们将深入探讨这种模式的原理、应用场景以及如何在实际编码中实现。 模板模式的核心在于抽象类,这个抽象类定义了一个操作中的算法骨架,而将一些具体步骤的实现延迟到其子类中。这样...

    设计模式--模板方法模式java例子

    模板方法模式是设计模式中行为型模式的一种,它在软件工程中扮演着非常重要的角色,尤其是在Java编程中。模板方法模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。它允许子类不改变一个算法的结构即可重...

    java设计模式-模板模式

    模板模式是一种行为设计模式,它在面向对象编程中扮演着重要的角色。此模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。这样,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤...

    JAVA设计模式之行为模式

    这是JAVA设计模式中属于行为模式的部分,包括Template(模板模式)、Chain of Responsibility(责任链模式)、Memento(纪念品模式)、Mediator(中介模式)、Strategy(策略模式)、State 、Observer(观察者模式)、Visitor...

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

    总结来说,模板方法模式是Java设计模式中的一种常见模式,用于定义算法的结构,并允许子类在不改变整体结构的情况下重定义某些步骤。在这个悍马模型的例子中,通过调整`run()`方法的实现位置,可以更好地体现模板...

    JAVA设计模式(java设计)

    Java设计模式是面向对象编程领域中的重要概念,它是一套被广泛接受并实践的解决软件设计问题的经验总结。设计模式并非具体的代码或库,而是一种在特定情境下为了解决常见问题而制定的通用解决方案的描述。它们描述了...

    JAVA-设计模式-行为型模式-模板方法模式

    JAVA-设计模式-行为型模式-模板方法模式

    《Java设计模式》刘伟 课后习题及模拟试题答案.rar

    《Java设计模式》是刘伟老师的一本经典教材,它深入浅出地讲解了软件设计中的重要概念——设计模式。设计模式是经验丰富的开发者在解决常见问题时总结出的通用解决方案,是软件开发中的智慧结晶。这本书的课后习题和...

    Java设计模式之禅

    《Java设计模式之禅》是一本深入浅出讲解设计模式的书籍,书中不仅包含23种经典设计模式的案例,还详细介绍了设计模式背后的思想和原则,适合初学者以及对设计模式有一定了解的程序员阅读。本书旨在帮助读者理解如何...

    java设计模式之策略模式与模板模式

    这种类型的设计模式属于行为模式。 #### 核心概念 - **策略接口(Strategy Interface)**:定义了一组相关或相互排斥的操作。这些操作在不同的上下文中有不同的实现。 - **具体策略类(Concrete Strategy Classes...

    Java设计模式26模板方法模式.pdf

    ### Java设计模式26模板方法模式 #### 模式动机 模板方法模式是基于继承机制的一种代码复用技术,它允许子类通过扩展的方式重写父类中的抽象方法,以此来实现不同子类间的差异性行为。在软件工程中,我们经常遇到...

    设计模式之模板方法模式Java实现和类设计图

    模板方法模式是软件设计模式中的一种行为模式,它在面向对象设计中扮演着重要的角色,尤其是在代码复用和保持代码结构整洁方面。该模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一...

    java版本的设计模式的实现demo

    在Java编程中,运用合适的设计模式可以提高代码的可维护性、可扩展性和可复用性。以下是关于Java版本设计模式实现demo的一些补充说明: 1. 设计模式分类 设计模式通常分为三大类:创建型模式、结构型模式和行为型模式...

    java设计模式ppt

    ### Java设计模式详解 在软件开发领域,设计模式是一种被广泛采用的解决方案,用来解决常见的设计问题。设计模式不仅能够帮助开发者写出可复用、可维护的代码,还能提高团队间的沟通效率。以下是对给定文件中提到的...

    java设计模式之模板方法模式详解

    "java设计模式之模板方法模式详解" 模板方法模式是一种行为设计模式,主要用于定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。...

Global site tag (gtag.js) - Google Analytics