您的位置:首页 > 其它

设计模式三:模板方法模式

2014-06-25 22:36 183 查看
模板方法模式定义如下:定义一个操作中的算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

模板方法模式非常简单,仅仅使用了Java的继承机制,但它是一个应用非常广泛的模式,其中,AbstractClass叫做抽象模板,它的方法分为两类:

基本方法:

基本方法也叫做基本操作,是由子类实现的方法,并且在模板方法被调用。

模板方法:

可以有一个或几个,一般是一个具体方法,也就是一个框架,实现对基本方法的调用,完成固定的逻辑。

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

实例如下:

package com.wyc.TemplateMethod;

public abstract class HummerModel {
	public abstract void start();
	
	public abstract void stop();
	
	public abstract void alarm();
	
	public abstract void engineBoom();
	
	public final void run(){
		this.start();
		this.alarm();
		this.engineBoom();
		this.stop();
	}
}


package com.wyc.TemplateMethod;

public class HummerH1Model extends HummerModel {

	public void start() {
		System.out.println("H1 start...");
	}

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

	}

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

	}

	public void engineBoom() {
		System.out.println("H1 engineBoom...");

	}
	
}


package com.wyc.TemplateMethod;

public class HummerH2Model extends HummerModel {

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

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

	}

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

	}

	public void engineBoom() {
		System.out.println("H2 engineBoom...");

	}

}


package com.wyc.TemplateMethod;

public class Client {
	public static void main(String[] args) {
		HummerModel h1 = new HummerH1Model();
		h1.run();
	}
}


模板方法模式的应用

1、优点

封装不变部分,扩展可变部分

把认为不变部分的算法封装到父类实现,而可变部分的则可以通过继承来继续扩展。

提取公共部分代码,便于维护

行为由父类控制,子类实现

2、缺点

按照我们的设计习惯,抽象类负责声明最抽象,最一般的事物属性和方法,实现类完成具体的事物属性和方法,但是模板方法模式却颠倒了,抽象类定义了部分抽象方法,由子类实现,子类执行的结果影响了父类的结果,也就是子类对父类产生了影响。

模板方法模式的使用场景

1、多个子类有公共的方法,并且逻辑基本相同

2、重要、复杂的算法可以把核心算法设计为模板方法,周边的相关细节功能则由各个子类实现

3、重构时模板方法模式是一个经常使用的模式,把相同的代码抽取到父类中,然后通过钩子函数约束其行为。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: