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

    定义:定义一个操作中的算法框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。

    模板方法模式比较简单,仅仅使用了java的继承机制,但仍然是一种应用广泛的设计模式。下面看一段通用示例代码:

    //抽象模板类
    public abstract class AbstractClass{
        //基本方法
        protected abstract void doSomething();
        //基本方法
        protected abstract void doAnything();
        //模板方法
        protected abstract void templateMethod(){
            this.doSomething();
            this.doAnything();
        }
    }
    //具体模板类
    public class ConcreateClass extends AbstractClass{
        //实现基本方法
        protected void doSomething(){
            
        }
        protected void doAnything(){
        
        }
    }
    //场景类
    public class Client{
        public static void main(String[] args){
            AbstractClass class1 = new ConcreateClass();
            class1.templateMethod();
        }
    }

    注意:抽象模板中的基本方法尽量设计为protected类型,符合迪米特法则,不需要暴露的属性和方法尽量不要设为protected。实现类若非必要,尽量不要扩大父类中的访问权限。

    优点:

    • 封装不变部分,扩展可变部分。不变的部分封装到公共抽象类中,可变部分通过继承来扩展。
    • 提取公共代码部分,便于维护;
    • 行为由父类控制,子类实现。父类通过扩展子类,增加了新方法,实现了反向控制和开闭原则。

    缺点:

    • 每个不同的实现都需要新建一个子类,增加了类的个数,也增加了系统复杂度。

    使用场景:

    • 多个子类有公有方法,并且逻辑相同;
    • 复杂、核心的方法可以设计为模板方法,相关细节通过子类实现;
    • 把相同代码抽取到公共类中,然后通过钩子函数约束其行为。
  • 相关阅读:
    java----session
    js封装成插件-------Canvas统计图插件编写
    js封装成插件
    js学习--变量作用域和作用域链
    学习js函数--自执行函数
    学习js函数--函数定义
    footer不满一屏时在最底部,超出一屏时在页面最下部
    ios 点击区域阴影问题
    提交表单后数据返回时间过长
    点击显示video
  • 原文地址:https://www.cnblogs.com/loveBolin/p/9683516.html
Copyright © 2011-2022 走看看