码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式之模板木模式

时间:2015-05-13 23:26:30      阅读:330      评论:0      收藏:0      [点我收藏+]

标签:

有时候有些事情可以分为几个步骤,但是具体每步做什么事可能不一样,这种情况下就是适合使用模板模式.

模板模式就是定义做一件事情需要做哪几步抽象出来,具体的实现交给继承类,然后抽象类里面定义一个执行方法按顺序调用之前定义的那些步骤.

举个具体情况,大家往冰箱放东西可以分为这几步:

    1.买冰箱(如果有可以不用买)

    2.打开冰箱门

    3.放入东西

    4.关闭冰箱门.

我们可以定义一个抽象模板,在模板定义这些步骤抽象方法,然后定义一个执行方法来以一定顺序调用之前定义的步骤.一般这个执行方法为了不让子类去修改会加上final修饰符.


具体实现:

模板抽象类

/* 模板抽象类 */
public abstract class AbstractTemplate {

	public abstract void buyFridge();

	public abstract void openFridgeDoor();

	public abstract void put();

	public abstract void closeFridgeDoor();

	public abstract boolean hasFridge();

	public final void putSomeThingIntoFridge() {
		if (!hasFridge()) {
			buyFridge();
		}
		openFridgeDoor();
		put();
		closeFridgeDoor();
	}

}

小红

/* 具体实现类XiaoHong */
public class XiaoHongClass extends AbstractTemplate {

	@Override
	public void buyFridge() {

	}

	@Override
	public void openFridgeDoor() {
		System.out.println("打开冰箱冷冻室门");

	}
	@Override
	public void put() {
		System.out.println("把冷饮放入");

	}
	@Override
	public void closeFridgeDoor() {
		System.out.println("关闭冰箱冷冻室门");

	}
	@Override
	public boolean hasFridge() {
		return true;
	}

}

小明

/*具体实现类小明*/
public class XiaoMingClass extends AbstractTemplate {

	@Override
	public void buyFridge() {
		System.out.println("买一个冰箱");
	}

	@Override
	public void openFridgeDoor() {
		System.out.println("打开冰箱冷藏室门");

	}

	@Override
	public void put() {
		System.out.println("把剩菜放入");

	}

	@Override
	public void closeFridgeDoor() {
		System.out.println("关闭冰箱冷藏室门");

	}

	@Override
	public boolean hasFridge() {
		return false;
	}

}

执行小明和小红把东西放到冰箱的执行方法.

public class Test {
	public static void main(String[] args){
		XiaoHongClass xiaoHong = new XiaoHongClass();
		XiaoMingClass xiaoMing = new XiaoMingClass();
		System.out.println("小红把东西放到冰箱--------");
		xiaoHong.putSomeThingIntoFridge();
		System.out.println("\n小明把东西放到冰箱--------");
		xiaoMing.putSomeThingIntoFridge();
	}

}

执行结果:

小红把东西放到冰箱--------
打开冰箱冷冻室门
把冷饮放入
关闭冰箱冷冻室门

小明把东西放到冰箱--------
买一个冰箱
打开冰箱冷藏室门
把剩菜放入
关闭冰箱冷藏室门

   小明没有冰箱所以比小红多了一个买冰箱的动作.小红是把 冷饮放到冷冻室.而小明是把剩菜放入冷藏室.

感觉很简单是不是,我也觉得,但是这个模板模式很常用的.

设计模式之模板木模式

标签:

原文地址:http://my.oschina.net/u/2250599/blog/414536

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!