设计原则与模式004模板方法

模板方法定义:

定义一个操作中的算法框架,而将步骤延迟到子类之中,子类不改变算法的结构即可改变算法的某些特性。

也就是说可以对一些复杂的算法进行分割,将其算法中固定不变的部分设计为模板方法

并将共性行为提成父类具体方法,而一些可以改变的细节由其子类来实现。

即一次性实现一个算法的不变部分,并将可变的行为留给子类来实现。
 
同时通过子类钩子行为实现子类对父类的反向控制,来决定算法的执行步骤!



设计模式的本质是面向接口,面向抽象,面向扩展编程

但是模板方法的特点导致其不能面向接口,退而求其次采用面向抽象编程
public abstract class Temlate(){


 public void template(){
    doA(); // 公共行为
    if(doB()){ // 钩子
            doC(); // 算法细节
    }
  }

 public void doA(){
   System.out.println("do A");
 }
     

public abstract boolean doA();
public abstract void doC();
     

 
     

}

模板方法的优缺点以及应用长裤

封装不变部分,扩展可变部分
定义流程规范,不定义具体实现

缺点:父类负责封装,子类负责实现;但子类实现却影响了父类的结果

应用场景:
多个子类有公有的方法,并且一个执行逻辑基本相同
复杂的算法,将核心设计成模板方法
GenericServlet的service模板方法
总的来说:但凡有一套逻辑流程相同,其中部分具体实现随具体业务场景而定的业务或算法,就可以采用模板方法设计模式



最佳实践:
设计原则大思想指导下,
一般不允许父类调用子类的行为,
而有这样的场景出现时,
可以通过模板方法子类影响父类的方式去实现

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值