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

Posted Chris_166

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式(GOF)之我见——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使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

以上是关于设计模式(GOF)之我见——Template Method的主要内容,如果未能解决你的问题,请参考以下文章

架构设计原则之我见2

架构设计原则之我见1

设计模式简单工厂之我见

领域驱动设计之我见-实现模式

单例模式之我见

设计模式之我见