您的位置:首页 > 其它

设计模式——模板方法(1)

2015-09-19 00:22 253 查看
模板方法适用于流程固定,具体步骤的实现确实变化的场景。举个例子,当你去游泳的时候你会经历

换衣服 -> 热身->游泳

这个流程是固定的,然而当具体到游泳的时候就千差万别了,你用蛙泳,仰泳,自由泳,蝶泳或者各种千奇百怪的姿势。模板方法在这个时候就有用武之地了。先来看一下模板方法的UML:



拿刚刚游泳为例来设计我们的类:

public abstract class Swimmer {
public void swimActivity() {
getChanged();
prepare();
swimming();
}

private void getChanged() {
System.out.println("Changing");
}

private void prepare() {
System.out.println("Preparing");
}

protected abstract void swimming();
}

public class BreaststrokeSwimmer extends Swimmer {
@Override
protected void swimming() {
System.out.println("Swimming in breaststroke");
}
}
public class FreeStrokeSwimmer extends Swimmer {
@Override
protected void swimming() {
System.out.println("Swimming in free stroke");
}
}
public class SwimmerFactory {
public static Swimmer getBreaststrokeSwimmer() {
return new BreaststrokeSwimmer();
}

public static Swimmer getFreeStrokeSwimmer() {
return new FreeStrokeSwimmer();
}
}

public class TestSwimmers {
public static void main(String ...args) {
Swimmer breaststroke = SwimmerFactory.getBreaststrokeSwimmer();
Swimmer freeStroke = SwimmerFactory.getFreeStrokeSwimmer();
breaststroke.swimActivity();
freeStroke.swimActivity();
}
}
这样,所有继承自Swimmer的类只需要实现swimming()方法,就可以使用swimActivity了。模板方法定义一个操作中的算法骨架,而将一些实现步骤延迟到子类当中,使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。模板方法是比较基础的设计模式,应用十分广泛,被框架、类库大量采用。实际上即使不知道模板方法的存在,我们在写代码的时候还是经常会用到这种设计。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: