• 模板方法模式(下)


    同步回调callBack 通过B复用,A扩展实现类似模板模式的功能
    package com.lf.pattern.callback;
    
    public interface ICallback {
    
        void methodToCallback();
    
    }
    package com.lf.pattern.callback;
    
    public class BClass {
        //可以复用
        public void process(ICallback callback) {
            //...xxx()
            System.out.println("B begin.");
            callback.methodToCallback();
            //...xxx()
            System.out.println("B end.");
        }
    }
    package com.lf.pattern.callback;
    
    /**
     * 同步回调callBack 通过B复用,A扩展实现类似模板模式的功能
     */
    public class AClass implements ICallback{
    
        public static void main(String[] args) {
            BClass b = new BClass();
            b.process(new ICallback() { //回调对象
                @Override
                public void methodToCallback() {
                    System.out.println("Call back me.");
                }
            });
            b.process(new AClass());
        }
    
        //A 定制代码
        @Override
        public void methodToCallback() {
            System.out.println("Im A duixiang.");
        }
    }

    模板模式 VS 回调

    从应用场景上来看,同步回调跟模板模式几乎一致。它们都是在一个大的算法骨架中,自由替换其中的某个步骤,起到代码复用和扩展的目的。而异步回调跟模板模式有较大差别,更像是观察者模式。

    从代码实现上来看,回调和模板模式完全不同。回调基于组合关系来实现,把一个对象传递给另一个对象,是一种对象之间的关系;模板模式基于继承关系来实现,子类重写父类的抽象方法,是一种类之间的关系。

    组合优于继承。实际上,这里也不例外。在代码实现上,回调相对于模板模式会更加灵活,主要体现在下面几点。

      1.像 Java 这种只支持单继承的语言,基于模板模式编写的子类,已经继承了一个父类,不再具有继承的能力。

      2.回调可以使用匿名类来创建回调对象,可以不用事先定义类;而模板模式针对不同的实现都要定义不同的子类。

      3.如果某个类中定义了多个模板方法,每个方法都有对应的抽象方法,那即便我们只用到其中的一个模板方法,子类也必须实现所有的抽象方法。而回调就更加灵活,我们只需要往用到的模板方法中注入回调对象即可。

  • 相关阅读:
    python模块
    Django基础
    Python __str__(self)和__unicode__(self)
    Redis基本操作
    测试面试宝典
    h5页面的测试方式
    selenium IDE的使用流程
    如何安装chrome扩展程序--selenium IDE
    Selenium 中 强制等待、显示等待、隐式等待的区别
    Selenium+Python 自动化 之八种元素定位方法
  • 原文地址:https://www.cnblogs.com/flgb/p/14813067.html
Copyright © 2020-2023  润新知