Java-23个设计模式 Template Method

Template Method


① 模板方法:在抽象类中定义一个稳定的算法骨架(如一个方法中有固定业务逻辑)

public abstract class AbstractTemplate {

    // 稳定的骨架
    public void getChampion(){
        // 固定逻辑
        dohookMethod();
        System.out.println(show());
    }

    // 抽象方法,该方法由子类声明
    protected abstract double doCalculateCore();

    // 钩子方法,供子类必要时扩展(do开头命名)
    protected void dohookMethod(){}

    // 已经实现的方法
    private String show(){
        // 获取分数
        double count = doCalculateCore();
        return "结果分数为:"+ count;
    }
}

 

② 具体类(重写父类的钩子方法进行扩展,实现父类抽象方法)

public class ConcreteClass extends AbstractTemplate {

    // 子类实现父类的抽象方法
    @Override
    protected double doCalculateCore() {
        return 1.80;
    }

    // 重写父类方法
    @Override
    protected void dohookMethod() {
        System.out.println("子类进行扩展");
    }
}

③ 多态

 public static void main(String[] args) {
        AbstractTemplate at = new ConcreteClass();
        at.getChampion();
    }

优点:相比直接在具体类上写getChampion,定义好的算法的骨架改动较少,更稳定,更具有复用价值。

缺点:每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。

例 : HttpServlet(service方法)

思想:在确定稳定操作(项目)的前提下,灵活应用各个子部件(子模块)的变化

总结:Template Method中为很多应用程序框架提供灵活的扩展点(子类继承父类进行override)

         (Library)不要调用我,让我来调用你(Application)【C++中的晚绑定】

 


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值