Andy Back-end Dev Engineer

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


模板方法设计模式

在软件开发过程中存在这样的情况,某类的某个方法的实现需要几个固定的步骤。在这些固定的步骤中,对于该类的不同对象,有些步骤的实现是固定不变的,有些步骤的实现是大相径庭的,有些是可变可不变的,对于这种情况就适用于模板方法设计模式。

模板方法设计模式的定义为:定义一个操作中某个算法的框架,然后将一些步骤延迟到子类中。模板方法模式可以使子类在不改变一个算法结构的前提下,对某些步骤实现个性化定义。

模板方法程序构成

在模板方法设计模式中,存在一个父类,其中包含两类方法。

模板方法:

实现某个算法的方法步骤,这些步骤都是调用步骤方法完成的。

步骤方法:模板方法中的每个阶段方法,其有三种类型。

  1. 抽象方法:子类必须实现的方法,是完成模板方法的算法步骤中必须由子类完成的个性化定义。
  2. 最终方法:子类不能重写的方法,是完成模板方法的算法步骤,对于所有子类执行都一样的步骤。
  3. 钩子方法:父类给出默认实现,但子类也可以重写的方法。

程序举例

1.定义父类

public abstract class ShoppingService {
	// 模板方法
	public final void shopping() {
		login(); // 登录网站
		choose(); // 挑选商品
		pay(); // 付款 
	}
	
	// 子类不能重写
	public final void login() {
		System.out.println("login");
	}
	
	// 子类必须实现
	public abstract void choose();
	
	// 钩子方法:子类可以重写
	public void pay() {
		System.out.println("alipay");
	}
}

2.定义两个子类

public class DressShoopingService extends ShoppingService{

	@Override
	public void choose() {
		System.out.println("choose Goach");
	}

	@Override
	public void pay() {
		System.out.println("choose wechat");
	}
}

public class ShoseShoopingService extends ShoppingService{

	@Override
	public void choose() {
		System.out.println("choose Nike");
	}
}

3.定义测试类

public class MyTest {
	public static void main(String[] args) {
		DressShoopingService dress = new DressShoopingService();
		ShoseShoopingService shose = new ShoseShoopingService();
		
		dress.shopping();
		shose.shopping();
	}
}

Comments

Content