Java大话设计模式学习总结(十)---模板方法模式

模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
来自大话设计模式
举例:
现在有很多体育运动都是计时运动,比如篮球、足球等,都需要在比赛开始时计时,等时间到后停止比赛,但是中间的比赛方式各不相同。展示每种比赛的流程就可以用模板模式来实现。

// 体育运动模板类
public abstract class Sports {

    public void start(){
        System.out.println("比赛开始,开始计时。");
    }
    
    public void end(){
        System.out.println("时间到,比赛结束。");
    }
    
    public abstract void process();
    
    // 使用final修饰,防止修改模板
    public final void play(){
        start();
        process();
        end();
    }
}

下面列举两个都需要进行计时的比赛:

public class Basketball extends Sports {
    @Override
    public void process() {
        System.out.println("开始进行篮球比赛");
    }
}

public class Football extends Sports {
    @Override
    public void process() {
        System.out.println("开始进行足球比赛");
    }
}

主程序:

public class Test {
    public static void main(String[] args) {
        Sports sports = new Basketball();
        sports.play();
        System.out.println("=== another sport game ===");
        sports = new Football();
        sports.play();
    }
}

// 运行结果
比赛开始,开始计时。
开始进行篮球比赛
时间到,比赛结束。
=== another sport game ===
比赛开始,开始计时。
开始进行足球比赛
时间到,比赛结束。

总结:
当多个子类有共同的方法,并且有相同的业务逻辑时,可以考虑使用模板模式。
当不变和可变的行为在方法的子类实现中混合在一起时,也可以通过模板模式把这些行为搬移到单一的地方,就可以很好的进行代码的复用。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值