ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-02-20 17:31:36  阅读:178  来源: 互联网

标签:Lib 开发人员 App Step Library 之我见 Template 设计模式 void


背景

假说在某公司存在框架开发人员和应用开发两个团队,框架开发团队会提供通用的基础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使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

标签:Lib,开发人员,App,Step,Library,之我见,Template,设计模式,void
来源: https://blog.csdn.net/u014294166/article/details/123032927

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有