`
TRAMP_ZZY
  • 浏览: 138921 次
社区版块
存档分类
最新评论

设计模式-模板方法模式

阅读更多
Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template
Method lets subclasses redefine certain steps of an glgorithm without changing the algorithm's
structure.
定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可以重定义
该算法的某些特定步骤。

为了防止恶意的操作,一般模板方法都加上 final 关键字,不允许被覆写。
	public abstract class AbstractClass {

		protected abstract void doSomething();
		
		protected abstract void doAnything();
		
		public void templateMethod() {
		
			doSomething();
			doAnything();
			
		}
	}
	
	public class ConcreteClass1 extends AbstractClass {

		@Override
		protected void doSomething() {
			System.out.println("ConcreteClass1 doSomething");
		}

		@Override
		protected void doAnything() {
			System.out.println("ConcreteClass1 doAnything");
		}

	}
	
	public class ConcreteClass2 extends AbstractClass {

		@Override
		protected void doSomething() {
			System.out.println("ConcreteClass2 doSomething");
		}

		@Override
		protected void doAnything() {
			System.out.println("ConcreteClass2 doAnything");
		}

	}
	
	public class Clients {

		public static void main(String[] args) {
			
			AbstractClass class1 = new ConcreteClass1();
			class1.templateMethod();
			
			AbstractClass class2 = new ConcreteClass2();
			class2.templateMethod();
		}

	}
	
	模板方法模式的优点
	(1)封装不变部分,扩展可变部分。
	(2)提取公共部分代码,便于维护。
	
	模板方法使用的场景
	(1)多个类有共有的方法,并且逻辑基本相同时。
	(2)重要、复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由各个子类实现。
	(3)重构时,模板方法是一个经常使用的方法,把相同的代码抽取到父类中,然后通过钩子函数约束
		其行为。
		
	public abstract class HummerModel {

		public abstract void start();
		
		public abstract void stop();
		
		public abstract void alarm();
		
		public abstract void engineBoom();
		
		public void run() {
			
			this.start();
			this.engineBoom();
			
			if (this.isAlarm()) {
				this.alarm();
			}
			
			this.stop();
			
		}
		
		// 钩子方法
		protected boolean isAlarm() {
			return true;
		}
		
	}
	
	public class HummerH1Model extends HummerModel {

		private boolean alarmFlag = true;
		
		@Override
		public void start() {
			System.out.println("H1 start.");
		}

		@Override
		public void stop() {
			System.out.println("H1 stop.");
		}

		@Override
		public void alarm() {
			System.out.println("H1 alarm.");
		}

		@Override
		public void engineBoom() {
			System.out.println("H1 enginBoom.");
		}

		protected boolean isAlarm() {
			return this.alarmFlag;
		}
		
		public void setAlarm(boolean isAlarm) {
			this.alarmFlag = isAlarm;
		}
	}
		
	public class HummerH2Model extends HummerModel {

		@Override
		public void start() {
			System.out.println("H2 start.");
		}

		@Override
		public void stop() {
			System.out.println("H2 stop.");
		}

		@Override
		public void alarm() {
			System.out.println("H2 alarm.");
		}

		@Override
		public void engineBoom() {
			System.out.println("H2 enginBoom.");
		}
		
		protected boolean isAlarm() {
			return false;
		}

	}
分享到:
评论

相关推荐

    设计模式-模板方法模式ppt

    ### 设计模式之模板方法模式解析 #### 一、引言 在软件开发过程中,我们经常面临这样的场景:有一些步骤是固定的,而某些步骤则可能因具体实现而异。为了解决这类问题,设计模式中引入了一种叫做“模板方法模式”的...

    设计模式-模板方法模式(讲解及其实现代码)

    模板方法模式是一种行为设计模式,它允许在定义行为框架的同时,延迟部分具体步骤到子类中实现。这种模式主要用于在父类中定义算法的骨架,而将一些步骤的实现细节留给子类去完成,从而使得不同的子类可以重用相同的...

    11.设计模式-模板方法模式1

    模板方法模式(Template Method Pattern)是一种行为设计模式,它允许在父类中定义算法的框架,然后由子类提供具体的实现。这种模式的核心是“模板方法”,它在父类中定义了一个操作的步骤顺序,并将某些步骤声明为...

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

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

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

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

    c++设计模式-行为型模式-模板方法模式

    c++设计模式-行为型模式-模板方法模式;qt工程;c++简单源码; 模板方法(Template Method)模式的定义如下:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重...

    JinbaoWeb#Hexo#Head-First软件设计模式-模板方法模式1

    (1) 系统根据账号和密码验证用户信息,如果用户信息错误,系统显示出错提示 (2) 如果用户信息正确,则根据用户类型的不同使用不同的利息计算公式计算利息(如活期

    java设计模式-模板模式

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

    设计模式之模板方法模式

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

    C++设计模式--基于Qt4开源跨平台开发框架

    设计模式是软件工程中的重要概念,它们是经过时间和实践验证的解决特定问题的模板,能够提升代码的可读性、可维护性和复用性。而Qt4作为一个强大的开源库,提供了丰富的功能,使得开发者能够在多个操作系统上构建...

    c#代码介绍23种设计模式-14模板方法模式(附代码)

    在设计模式中,模板方法模式中模板和生活中模板概念非常类似,下面让我们就详细介绍模板方法的定义,大家可以根据生活中模板的概念来理解模板方法的定义 1. 模板方法模式的定义 模板方法模式——在一个抽象类中定义...

    C# 设计模式系列教程-模板方法模式

    1. 概述  定义一个操作中的算法的骨架,而将步骤延迟到子类中。模板方法使得子类可以不改变一个... 3.2 模板方法模式代码实现 /// /// 抽象类 /// public abstract class AbstractClass { // 一些抽象行为

    设计模式-Java语言中的应用

    设计模式通常分为三类:创建型模式(如工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式),结构型模式(如适配器模式、装饰器模式、代理模式、桥接模式、组合模式、外观模式、享元模式)以及行为型模式(如...

    DesignPattern_Template:设计模式-模板方法模式

    模板方法模式作为设计模式之一,是一种行为模式,它在面向对象设计中扮演着关键角色。该模式允许我们在抽象类中定义一个算法的骨架,而将一些步骤延迟到子类中。这种做法使得子类可以不改变算法的结构即可重定义算法...

    java模式--模板模式实例代码

    模板模式是一种行为设计模式,它使你能在代码中定义一个操作的不同步骤,并让子类决定这些步骤如何执行。模板模式提供了创建算法结构的通用接口,而具体的实现则由子类来完成。这种模式允许在不修改原有代码的情况下...

    C++设计模式-基于QT4开源跨平台开发框架 源码

    C++设计模式是一种在软件开发中经过验证的解决常见问题的方法论,它为软件开发提供了标准的解决方案。在本资源中,"C++设计模式-基于QT4开源跨平台开发框架 源码",我们将重点探讨如何在C++编程语言中结合QT4框架来...

    java设计模式---诙谐易懂版

    例如,代理模式(Proxy Pattern)、单例模式(Singleton Pattern)、工厂方法模式(Factory Method Pattern)、抽象工厂模式(Abstract Factory Pattern)、适配器模式(Adapter Pattern)、模板方法模式(Template ...

    设计模式精解-GoF-23种设计模式解析--附C++源代码

    设计模式是软件工程中的一种最佳实践,用于解决在软件开发过程中常见的问题。这些模式是由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位大师,通常被称为GoF(Gang of Four),在他们的经典著作...

Global site tag (gtag.js) - Google Analytics