Java中的回调就是模板方法模式吗?

Python08

Java中的回调就是模板方法模式吗?,第1张

不是,Java中的回调一般指的是一种异步,也可以不是,简单来说,就是, A需要B做一件事,同时,当B做完这件事之后,A需要做另一件事,(A做得这件事,必须在B做得那件事完成之后,而且A这件事,是B不能做得,必须A来做)。这种情况下,B在完成自己的事情后,必须通知A,去做A需要做得事情。 B通知A的这个过程,就是回调。回调一般跟异步,多线程联系在一起。

模板方法,一般是指有 父类定义整体的流程框架,子类去实现,不同过程的差异。以人为例,

大部分人 都是 上学,工作,结婚 这样过来的,但是不同的人,实现 上学,工作,结婚这些事的情况是不一样的,有人 上的是清华北大,有的可能是高中,有人在500强工作,有人在搬砖。但是都是按照 上学 工作,结婚,这个流程走过来的。

个人理解,可能有错误。

1、java是纯面向对象的语言(main都是写到类里的),所以没有原生的模板功能。

2、使用“模板模式”可以实现类似的效果,这也是java里最常用的模式之一。

以下是一篇教程:

模板方法模式的结构

模板方法模式是所有模式中最为常见的几个模式之一,是基于继承的代码复用的基本技术。

模板方法模式需要开发抽象类和具体子类的设计师之间的协作。一个设计师负责给出一个算法的轮廓和骨架,另一些设计师则负责给出这个算法的各个逻辑步骤。代表这些具体逻辑步骤的方法称做基本方法(primitive method);而将这些基本方法汇总起来的方法叫做模板方法(template method),这个设计模式的名字就是从此而来。

模板方法所代表的行为称为顶级行为,其逻辑称为顶级逻辑。模板方法模式的静态结构图如下所示:

这里涉及到两个角色:

抽象模板(Abstract Template)角色有如下责任:

■定义了一个或多个抽象操作,以便让子类实现。这些抽象操作叫做基本操作,它们是一个顶级逻辑的组成步骤。

■定义并实现了一个模板方法。这个模板方法一般是一个具体方法,它给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。顶级逻辑也有可能调用一些具体方法。

具体模板(Concrete Template)角色又如下责任:

■实现父类所定义的一个或多个抽象方法,它们是一个顶级逻辑的组成步骤。

■每一个抽象模板角色都可以有任意多个具体模板角色与之对应,而每一个具体模板角色都可以给出这些抽象方法(也就是顶级逻辑的组成步骤)的不同实现,从而使得顶级逻辑的实现各不相同。

源代码

抽象模板角色类,abstractMethod()、hookMethod()等基本方法是顶级逻辑的组成步骤,这个顶级逻辑由templateMethod()方法代表。

public abstract class AbstractTemplate {

    /**

     * 模板方法

     */

    public void templateMethod(){

        //调用基本方法

        abstractMethod()

        hookMethod()

        concreteMethod()

    }

    /**

     * 基本方法的声明(由子类实现)

     */

    protected abstract void abstractMethod()

    /**

     * 基本方法(空方法)

     */

    protected void hookMethod(){}

    /**

     * 基本方法(已经实现)

     */

    private final void concreteMethod(){

        //业务相关的代码

    }

}

具体模板角色类,实现了父类所声明的基本方法,abstractMethod()方法所代表的就是强制子类实现的剩余逻辑,而hookMethod()方法是可选择实现的逻辑,不是必须实现的。

public class ConcreteTemplate extends AbstractTemplate{

    //基本方法的实现

    @Override

    public void abstractMethod() {

        //业务相关的代码

    }

    //重写父类的方法

    @Override

    public void hookMethod() {

        //业务相关的代码

    }

}

模板模式的关键是:子类可以置换掉父类的可变部分,但是子类却不可以改变模板方法所代表的顶级逻辑。

每当定义一个新的子类时,不要按照控制流程的思路去想,而应当按照“责任”的思路去想。换言之,应当考虑哪些操作是必须置换掉的,哪些操作是可以置换掉的,以及哪些操作是不可以置换掉的。使用模板模式可以使这些责任变得清晰。

一共23种设计模式!

按照目的来分,设计模式可以分为创建型模式、结构型模式和行为型模式。

创建型模式用来处理对象的创建过程;结构型模式用来处理类或者对象的组合;行为型模式用来对类或对象怎样交互和怎样分配职责进行描述。

创建型模式用来处理对象的创建过程,主要包含以下5种设计模式:

 工厂方法模式(Factory Method Pattern)

 抽象工厂模式(Abstract Factory Pattern)

 建造者模式(Builder Pattern)

 原型模式(Prototype Pattern)

 单例模式(Singleton Pattern)

结构型模式用来处理类或者对象的组合,主要包含以下7种设计模式:

 适配器模式(Adapter Pattern)

 桥接模式(Bridge Pattern)

 组合模式(Composite Pattern)

 装饰者模式(Decorator Pattern)

 外观模式(Facade Pattern)

 享元模式(Flyweight Pattern)

 代理模式(Proxy Pattern)

行为型模式用来对类或对象怎样交互和怎样分配职责进行描述,主要包含以下11种设计模式:

 责任链模式(Chain of Responsibility Pattern)

 命令模式(Command Pattern)

 解释器模式(Interpreter Pattern)

 迭代器模式(Iterator Pattern)

 中介者模式(Mediator Pattern)

 备忘录模式(Memento Pattern)

 观察者模式(Observer Pattern)

 状态模式(State Pattern)

 策略模式(Strategy Pattern)

 模板方法模式(Template Method Pattern)

 访问者模式(Visitor Pattern)

推荐你一本好书:《软件秘笈:设计模式那点事》,里面讲解的23中设计模式例子很生动,容易理解,还有JDK中设计模式应用情况,看了收获挺大的!百度里面搜“设计模式”,第一条中设计模式百度百科中就有首推该图书,浏览量在20几万以上的,不会错的。好东西大家一起分享!

祝你早日学会设计模式!