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.按照设计习惯, 抽象类负责声明最抽象、最一般的事务属性和方法
实现类负责完成具体的事务属性和方法
但是模板方法设计正好相反,子类运行的结果影响了父类的结果
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


