java设计模式(6):模板方法模式

1. 什么是模板模式

        准备一个抽象类,定义一个方法骨架,和一些抽象方法。让每个继承这个类的子类以自己方式实现抽象方法,从但是方法骨架都都是一样的。

简单一点的理解:完成一件事情,有固定的几个逻辑步骤,但是每个步骤根据使用对象的不同,实现细节不同;那就可以定义一个父类,在父类中定义一个完成该事情的总的方法,按照完成事情需要的步骤去调用其每个步骤的实现方法。而每个步骤的实现方法由子类完成。

抽象父类:AbstractClass:实现模板方法,定义了算法的骨架,和其他一些固定的执行步骤方法

实现子类:ConcreatClass:实现抽象类中的抽象方法(不是实现模板方法)。不同的对象有不同的实现细节

2. 那些场景下使用模板模式

        模板模式主要是基于类的继承,让代码复用。平时我们在编程时,经常碰到一些类似于RestTemplate,RedisTemplate,JdbcTemplate的模板类,他们就是采用的模板方式。

3. 示例demo

        场景模拟:出行场景,不管是坐火车出行还是坐飞机出行,都需要买票,取票,检票,上车等待出发这四个固定的步骤,那出行我们就可以抽象出这四个步骤,并定义一个出行的方法,但是具体是买火车票还是飞机票还是大巴票,就是实现的子类去定义。但是等待上车是对各个子类都是一样的,就可以在父类中直接实现了。

模板类

public abstract class TravelTemplate {
	
	abstract void payTicket();
	
	abstract void getTicket();
	
	abstract void checkTicket();
	
	public void waitToGo(){
		System.out.println("准备就绪,等待出发");
	}
	
	void travel(){
		// 1.买票
		payTicket();
		// 2.取票
		getTicket();
		// 3.检票
		checkTicket();
		// 4.等待出发
		waitToGo();
	}

}

火车出行实现类

public class TrainTravel extends TravelTemplate{

	@Override
	void payTicket() {
		System.out.println("买火车票");
		
	}

	@Override
	void getTicket() {
		System.out.println("取火车票");
		
	}

	@Override
	void checkTicket() {
		System.out.println("检火车票");
		
	}
	
}

飞机出行实现类

public class PlanTravel extends TravelTemplate{

	@Override
	void payTicket() {
		System.out.println("买飞机票");
		
	}

	@Override
	void getTicket() {
		System.out.println("取飞机票");
		
	}

	@Override
	void checkTicket() {
		System.out.println("检飞机票");
		
	}
	
}

测试类

	public static void main(String[] args) {
		PlanTravel planTravel = new PlanTravel();
		planTravel.travel();
		
		System.out.println("--------------------");
		
		TrainTravel trainTravel = new TrainTravel();
		trainTravel.travel();
	}

测试结果

买飞机票
取飞机票
检飞机票
准备就绪,等待出发
--------------------
买火车票
取火车票
检火车票
准备就绪,等待出发

4. 总结

        使用模板方式的优点主要是具体细节实现步骤定义在子类中,子类定义详细处理算法是不会改变父类中模板方法的实现结构的,使得代码能够复用;缺点是每个不同的实现都需要定义一个子类,使得类的个数增加,系统更加庞大。

5. 参考

《JAVA与模式》之模板方法模式

设计模式之-模板模式

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值