zoukankan      html  css  js  c++  java
  • 模板方法模式

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

      这个模式是用来创建一个算法的模板。模板就是一个方法,这个方法将算法定义成一组步骤,其中的任何步骤都可以是抽象的,由子类负责实现。这可以保持算法的结构保持不变,同时由子类提供部分实现。

      这个模式还可以使用一种叫做“钩子”的方法。何谓“钩子”,或,它的作用是什么?

      钩子可以让子类实现算法中的可选部分,让子类能够有机会对模板方法中某些即将发生的(或刚刚发生的)步骤做出反应,或决定是否做某些步骤。

      模板方法中有一些抽象方法,也可能有一些钩子,对于使用何者,如何确定?

      当子类必须提供算法中的某个方法或步骤的实现时,就使用抽象方法;如果这个方法是可选的,就使用钩子。

    代码示例:

    public abstract class A
    {
        // final 关键字表示子类无法覆盖,该方法即模板方法       
        final void templateMethod()              
        {                    
            // 下面即步骤(结构)
        
            // 子类必须覆盖
            Method1();                          
    
            // 子类必须覆盖
            Method2();                     
    
            // 钩子,子类选择性覆盖,联系上面所述
            if(hook1())                      
            {
                // 子类无法覆盖
                Method3();                  
            }
    
            // 钩子,子类选择性覆盖,联系上面所述
            hook2();                        
        }
    
        abstract void Method1()
        {
            // 定义成抽象方法,由子类实现
        }
    
        abstract void Method2() {}
    
        final void Method3()
        {
            // do something
            // 子类直接继承使用即可
        }
    
        Boolean hook1()
        {
            // 这个方法可以默认不做事,也可以做一些简单的事,
            // 我们称之为“钩子”,子类可以视情况决定要不要覆盖他们,
            // 该钩子一般用来决定是否做某些步骤
        }
    
        void hook2()
        {
            // 这个方法可以默认不做事,也可以做一些简单的事,
            // 我们称之为“钩子”,子类可以视情况决定要不要覆盖他们
            // 该钩子一般用来做一些事情
        }
    }
  • 相关阅读:
    SQL练习题
    数据库基础
    Java-反射与注解
    Linux基础
    pipeline的使用示例
    vagrant与vrtualbox的使用
    12.04公有,私有属性,析构函数,成员属性
    12.1面向对象编程的介绍(oop):封装,继承,多态,访问私有属性
    mysql操作之二:fetchone与获取lastrowid
    10.02经典类的bug
  • 原文地址:https://www.cnblogs.com/hachun/p/3586180.html
Copyright © 2011-2022 走看看