zoukankan      html  css  js  c++  java
  • 设计模式-模版方法

    1. 模版方法模式的抽象父类有两类方法:具体方法、模版方法
    2. 将具体处理(干活的)的实现交给子类,父类只是定义方法体,子类负责具体处理(干活的)实现;而将处理框架、规则、顺序、流水、各类异常情况判断  交给父类的“模版方法”。
    3. 特点:
      1. 在模版方法模式中,父类、子类是紧密联系、共同工作的。因此,在子类中实现父类中声明的方法,必须要理解这些抽象方法被调用的时机。在看不到父类源代码的情况下,想要编写出子类是非常困难的
      2. 一般模板方法都加上final关键字,不允许被覆写。
    4. 优点:
      1. 在父类的模版方法中编写了算法,而无需在每个子类中再编写算法。
      2. 把算法中认为是不变部分的算法封装到父类实现,而可变部分的则可以通过继承来继续扩展
    5. 缺点:
      1. 按照我们设计习惯,抽象类负责声明最抽象、最一般的事物属性和方法,实现类完成具体的事物属性和方法,但是模板方法模式却颠倒了,抽象类定义了部分抽象方法,由子类实现,子类执行的结果影响了父类的结果,也就是子类对父类产生了影响,这在复杂的项目中,会带来代码阅读的难度,而且也会让新手产生不适感。
    6. 使用场景
      1. 多个子类有公有的方法,并且逻辑基本相同时。
      2. 重要、复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由各个子类实现。
    7. 如何扩展:
      1. 模版方法一般设计为final,不能在子类中多态;为了确保模版方法本身的灵活性,可以在模版方法本身中设置多个判断条件(可以是变量、可以是方法,切可在子类中重构)。判断条件的运行时情况,依据子类的多态重写情况而定。
    8. 类图
      1.     
    9. 代码结构

        模板方法在一些开源框架中应用非常很多,基础系统提供了一个抽象类,然后开源框架写了一堆子类,如果你需要扩展功能,可以继承了这个抽象类,然后覆写protected方法,再然后就是调用一个类似execute方法,就完成你的扩展开发,非常容易扩展的一种模式。

    public abstract class AbstractClass {
    
        // 基本方法
    
        protected abstract void doSomething();
    
        // 基本方法
    
        protected abstract void doAnything();
    
        // 模板方法
    
        public void templateMethod() {
    
            /*
             * 调用基本方法,完成相关的逻辑
             */
    
            this.doAnything();
    
            this.doSomething();
    
        }
    
    }
    public class ConcreteClass1 extends AbstractClass {
        // 实现基本方法
        protected void doAnything() {
    
            // 业务逻辑处理
        }
    
        protected void doSomething() {
    
            // 业务逻辑处理
        }
    
    }
  • 相关阅读:
    js在当前时间上加分钟数得到新的时间
    (转)@Autowired(required=false)注入注意的问题
    Java代替if和switch的方法(记录一下)
    windows下RocketMQ的安装部署
    RocketMQ在windows环境下的安装(转)
    简单说下二维数组
    JAVA-单例模式的几种实现方式
    (转)mybatis一级缓存二级缓存
    MySql安装后在服务管理器里边找不到MySql服务项的解决办法(win10)
    JAVA字符串的替换replace、replaceAll、replaceFirst的区别解析。
  • 原文地址:https://www.cnblogs.com/jiangtao1218/p/9426217.html
Copyright © 2011-2022 走看看