设计模式(GOF)之我见(2)——Template Method

背景

假说在某公司存在框架开发人员和应用开发两个团队,框架开发团队会提供通用的基础Lib库给应用开发人员使用。在具体使用流程中需要应用开发人员在App中告诉Lib库是否已经ready了,如果App ready了,Lib就会继续与App交互。
例如:

Step 1:Lib初始化
Step 2:App 执行ready工作,ready之后告诉Lib;
Step 3:如果Appready,Lib程序就继续与App交互

解决方案

  1. Step 1和Step 3是Lib中稳定不变的动作,不论哪个业务App使用都会调用到这两个步骤,所以Lib将这两个Step内部封装起来;
  2. Step 2需要根据不同的App返回不同,所以Step需要App实现;
  3. Step 3是依赖Step2的;
  4. Step 1、2、3是一个完整的流程,Lib可以考虑将其封装成一个方法,然后整体提供一个接口给App

Lib库开发人员开发Lib库

abstract class Library {
    public void run() {
        initLibrary(); // step1: Library初始化
        if (appReady()) { // step2: APP是否ready了
            output(); // step3: Library继续运行
        }
    }
    
    private void initLibrary() {
        System.out.println("Library init");
    }
    protected abstract boolean appReady();
    private void output() {
        System.out.println("Hello world!");
    }
}

应用开发者使用Lib库

class Application extends Library {
    protected boolean appReady() { // APP实现Lib的Step2 
        System.out.println("APP: yeah, I'm Ready!");
        return true;
    }
    
    public void startWork() {
        super.run();
    }
}

测试程序

在这里插入代码片public class MyClass {
    public static void main(String args[]) {
        Application app = new Application();
        app.startWork();// Application运行
    }
}

小结

  1. 以上就是Template Method(模板方法);
  2. 好在哪里?(围绕https://blog.csdn.net/u014294166/article/details/52494277)
    (1) 将"早绑定"改为了"晚绑定":“晚绑定”即Lib->App, Lib开发人员写的早,但是写的早的Lib去绑定写的晚的App(因为App需要实现Step2);
    (2) 实现框架与应用程序之间的松耦合;
    (3) 稳定的部分:定义一个操作中的算法骨架;
    变化的部分:而这个骨架中的一些步骤延迟到子类中;
    复用:Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值