java设计模式之模板模式

一:模板模式定义

  1.1 定义

     模板模式是定义一个操作中基本的骨架,而将一些实现步骤延迟到子类中去实现,但是处理的流程还是看父类定制的方式,只是不同的子类执行会得到不同的结果而已,模板模式完全遵循了抽象类应该尽可能将数据实现放在子类当中。

 1.2 角色

    1:抽象参与者,即模板模式的抽象基类,整个流程实现由其控制,变化的部分由子类实现。

 2:具体实现者,即继承抽象参与者的子类,里面有不同的实现

 1.3 使用场景

    如果一个系统中需要实现一个算法不变的部分,并将变化的部分交给子类去完成,这个时候就可以使用模板模式进行设计。

二:模板模式实现

  2.1 抽象基类,定义整个实现的骨干

package com.travelsky.pss.tanjie.model;

/**
 * 模板方法模式:抽象类实现整个骨架,关键步骤的实现依据不同子类实现去实现,大的结构不变
 * @author tanjie
 * 
 * 使用场景:
 *   1:如果各个子类中有公共的行为时,应该被提取出来集中到一个公共的父类中实现避免代码重复
 *   2:在整个软件设计的过程中,如果实现的关键几步中有不变的,有变化的,可将变化的抽象出来供不同的
 *   具体子类去实现,父类控制子类的处理逻辑
 *   
 * 和策略模式的区别:
 * 
 * 
 *   策略模式是切换了整个具体的算法实现,不同策略虽然实现的目的一样,但可能具体过程不一样,一旦切换,整个实现过程都会切换
 *   模板模式只是实现了父类一些变化的部分,但是整体的骨架还是由抽象基类决定
 *
 */
public abstract class AbstractPeopleWork {
	
        public void  getUp(){
	  System.out.println("首先:起床");
	}
		
        protected abstract void eat();
	
	protected abstract void takeToWork();
	
   	public void beginWork(){
		System.out.println("最后:开始上班");
	}
	
	//模板方法,定义final不让子类去修改实现整体的骨架
	public final void ModelWork(){
		System.out.println("开始调用模板方法");
		getUp();
		eat();
		takeToWork();
		beginWork();
		System.out.println("模板方法调用结束");
	}
}

   2.2 子类实现

package com.travelsky.pss.tanjie.model;

public class PeopleA extends AbstractPeopleWork{

	@Override
	public void eat() {
		System.out.println("A:吃豆浆油条");
		
	}

	@Override
	public void takeToWork() {
		System.out.println("A:坐公交");
	}
}

 

package com.travelsky.pss.tanjie.model;

public class PeopleB extends AbstractPeopleWork{

	@Override
	public void eat() {
		System.out.println("B:吃包子稀饭");
		
	}

	@Override
	public void takeToWork() {
		System.out.println("B:坐地铁");
	}
}

   2.3 测试类

package com.travelsky.pss.tanjie.model;
public class ModelMain {
	public static void main(String[] args) {
		AbstractPeopleWork abstractPeopleWork = new PeopleA();
		AbstractPeopleWork abstractPeopleWork2 = new PeopleB();
		abstractPeopleWork.ModelWork();
		abstractPeopleWork2.ModelWork();
	}
}

  2.4 实现效果

开始调用模板方法
首先:起床
A:吃豆浆油条
A:坐公交
最后:开始上班
模板方法调用结束
开始调用模板方法
首先:起床
B:吃包子稀饭
B:坐地铁
最后:开始上班
模板方法调用结束

你可能感兴趣的:(java,设计模式,模板模式)