设计模式之模板方法模式
模板方法模式(Template Method) 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
需求:购买车票。简单的说,用户登录,选择车票,确认支付,购买完成。
对于每一个用户都是这样的步骤,但是每个用户的信息,车次,票价等不同。
先定义好各种行为,抽象类BuyTickets:
public abstract class BuyTickets {
protected abstract String userName();
protected abstract String chooseTicket();
protected abstract String payMoney();
public void buyTicketSuccess() {
System.out.println(userName() + "购买:" + chooseTicket() + "价格:" + payMoney() + "成功!");
}
}
用户购买:
public class UserOne extends BuyTickets {
@Override
protected String userName() {
return "张三";
}
@Override
protected String chooseTicket() {
return "上海-北京";
}
@Override
protected String payMoney() {
return "550";
}
}
public class UserTwo extends BuyTickets {
@Override
protected String userName() {
return "李四";
}
@Override
protected String chooseTicket() {
return "上海-广州";
}
@Override
protected String payMoney() {
return "600";
}
}
运行:
public class test {
public static void main(String[] args) {
BuyTickets one = new UserOne();
BuyTickets two = new UserTwo();
one.buyTicketSuccess();
two.buyTicketSuccess();
//张三购买:上海-北京价格:550成功!
//李四购买:上海-广州价格:600成功!
}
}
示例不太好,比较简单.
模板方法就是提供了一个很好的代码复用平台。当不变的行为和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。我们通过模板方法模式把这些行为搬迁到单一的地方。这样就帮助子类摆脱重复的不变行为的纠缠–《大话设计模式》
本文地址:http://blog.youkuaiyun.com/ProdigalWang/article/details/76056552