java代码中模板方法简介及示例说明
下文笔者讲述设计模式中模板方法的简介说明,如下所示
模板方法简介
模板方法设计模式: 是基于继承的设计模式 模板方法设计模式只允许子类别为一个或多个步骤提供实现方式
模板方法结构
模板方法模式 由两部分结构组成 抽象父类和具体的实现子类 a.抽象父类:封装子类框架,如:一些公共方法以及封装子类中所有重写方法的执行顺序 b.具体实现子类:继承整个抽象类,选择性的重写父类方法
模板方法的应用场景
1.多个子类有共有的方法,且处理逻辑基本相同 2.重要、复杂的算法 可以把核心算法设计为模板方法 相关的细节功能则由各个子类自行实现 3.重构时,模板方法设计经常被用到, 把相同的代码抽取到父类中, 然后通过构造函数约束其行为
模板方法示例
Controller 类 @RestController @RequestMapping("/back") public class CallBackController { @Autowired @Qualifier("lt") private CallBackService ltService; @Autowired @Qualifier("hw") private CallBackService hwService; @PostMapping("/hw") public void hw(@RequestBody CallInfo req) { hwService.execute(req); } @PostMapping("/lt") public void lt(@RequestBody CallInfo req) { ltService.execute(req); } } Service层 public abstract class CallBackService { // 算法框架 这里只列举两个步骤 public void execute(CallInfo req) { // 1.校验数据 this.validate(req); // 2.执行回调 this.callBack(req); System.out.println(req.getSource() + "执行完毕!"); } protected abstract void validate(CallInfo req); protected abstract void callBack(CallInfo dto); } 实现类 @Service("hw") public class HwCallBackImpl extends CallBackService { @Override protected void validate(CallInfo req) { System.out.println("华为参数校验通过"); } @Override protected void callBack(CallInfo dto) { System.out.println("华为回调完毕!"); } } //在子类中可以增加一些子类特有的行为,灵活扩张 ---------------------------------------------------------- @Service("lt") public class LtCallBackImpl extends CallBackService { @Override protected void validate(CallInfo req) { System.out.println("联通参数校验通过"); } @Override protected void callBack(CallInfo dto) { System.out.println("联通回调完毕!"); } }
模板方法的优缺点
模板方法的优点: 1.封装代码中不变的部分, 使代码可灵活扩展可变部分 将不变的信息封装到父类中,子类进行相应的实现 2.行为的执行逻辑由父类来控制, 子类来实现. 3.抽象类中是公共代码框架, 便于维护----使用抽象类定义执行模板,子类进行相应的实现 模板方法的缺点: 1.算法的框架需要改变的时候, 需要修改抽象类 2.按照设计习惯, 抽象类负责声明最抽象、最一般的事务属性和方法 实现类负责完成具体的事务属性和方法 但是模板方法设计正好相反,子类运行的结果影响了父类的结果
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。