zoukankan      html  css  js  c++  java
  • Template Method

    定义

      模板方法模式是类的行为模式。

      在一个方法中定义一个算法的骨架,将一些算法的具体步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

    结构和角色

            

    AbstractClass 这个抽象类包含了一个模板方法,和抽象方法,具体方法,钩子方法。

    ConcreteClass 这个具体类继承上面的抽象类,实现抽象方法。此具体类可以有多个。

    package ds.templatemethod;
    
    public abstract class AbstractClass {
        // 模板方法, 用final 修饰是为了防止子类覆盖此方法,而改变算法的结构
        public final void templateMethod() {
    
            abstractMethod1();
            abstractMethod2();
            abstractMethod3();
            // 这里是钩子方法,
            if (hookMethod()) {
                concreteMethod();
            }
        }
    
        public abstract void abstractMethod1();
    
        public abstract void abstractMethod2();
    
        public abstract void abstractMethod3();
    
        public void concreteMethod() {
    
        }
    
        public boolean hookMethod() {
            return true;
        }
    }
    package ds.templatemethod;
    
    public class ConcreteClass extends AbstractClass {
    
        @Override
        public void abstractMethod1() {
            System.out.println("abstractMethod1 ... ");
        }
    
        @Override
        public void abstractMethod2() {
            System.out.println("abstractMethod2 ... ");
        }
    
        @Override
        public void abstractMethod3() {
            System.out.println("abstractMethod3 ... ");
        }
    }

    模仿servlet 中的模板方法模式 ..

    模板方法中的方法 

      模板方法模式的方法可以分为两类:模板方法(Template Method),基本方法。

      模板方法:这个方法将算法定义成一组步骤,其中的任何步骤都可以是抽象的,由子类负责实现。这可以确保算法的结构保持不变。

      基本方法:可以分为三种,抽象方法(Abstract Method)、具体方法(Concrete Method)、钩子方法(Hook Method)

        抽象方法:由抽象类声明,由具体子类实现。

        具体方法:由抽象类声明并实现,子类可以选择不实现或覆盖。

        钩子方法:由抽象类声明并实现,而子类会加以扩展。通常抽象类给出的实现是一个空实现,作为方法的默认实现。

    *钩子方法,这个方法很有技巧。它可以让子类有能力对算法的不同点进行挂钩。(钩子方法的名字应该以do开始)

    设计原则

      "好莱坞原则" : 不要给我们打电话,我们会给你打。

      好莱坞原则体现了模板方法的关键 : 子类可以置换掉父类的可变部分,但是子类却不可以改变模板方法所代表的顶级逻辑。

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

  • 相关阅读:
    几种常见排序算法
    62.Android之各分辨率定义的图片规格
    MVC
    EasyUI datebox 只读和取值
    WebForm带有图片的验证码
    WebForm水印照片
    ajax完整结构
    jquery简单动画
    webform数据导出
    WebForm 发送邮箱
  • 原文地址:https://www.cnblogs.com/shouwangzhe-/p/3653126.html
Copyright © 2011-2022 走看看