• JAVA设计模式-模板模式


    模板模式作用

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

    主要解决:一些方法通用,却在每一个子类都重新写了这一方法。

    何时使用:有一些通用的方法。

    如何解决:将这些通用算法抽象出来。

    关键代码:在抽象类实现,其他步骤在子类实现。

    示例代码:

    Exam.java

    /**
    * @Classname Exam
    * @Description 考试抽象类
    * @Created by xiangty
    */
    public abstract class AbstractExam {

    /**
    * 考试开始
    */
    abstract void examBegin();

    /**
    * 在考试期间
    */
    abstract void duringTheExamination();

    /**
    * 考试结束
    */
    abstract void examEnd();


    public final void exam(){
    examBegin();

    duringTheExamination();

    examEnd();
    }

    }
    ChineaseExam.java
    /**
    * @Classname ChineaseExam
    * @Description 语文考试类
    * @Created by xiangty
    */
    public class ChineaseExam extends AbstractExam {

    @Override
    void examBegin() {
    System.out.println("语文考试开始...");
    }

    @Override
    void duringTheExamination() {
    System.out.println("语文考试中...");
    }

    @Override
    void examEnd() {
    System.out.println("语文考试结束...");
    }

    }
    MathExam.java

    /**
    * @Classname MathExam
    * @Description 数学考试类
    * @Created by xiangty
    */
    public class MathExam extends AbstractExam {

    @Override
    void examBegin() {
    System.out.println("数学考试开始...");
    }

    @Override
    void duringTheExamination() {
    System.out.println("数学考试中...");
    }

    @Override
    void examEnd() {
    System.out.println("数学考试结束...");
    }

    }
    ExamTest.java

    /**
    * @Classname ExamTest
    * @Description 模板模式测试类
    * @Created by xiangty
    */
    public class ExamTest {

    public static void main(String[] args) {
    AbstractExam chineaseExam = new ChineaseExam();
    chineaseExam.exam();

    MathExam mathExam = new MathExam();
    mathExam.exam();
    }

    }
    优点: 1、封装不变部分,扩展可变部分。 2、提取公共代码,便于维护。 3、行为由父类控制,子类实现。

    缺点:每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。

    使用场景: 1、有多个子类共有的方法,且逻辑相同。 2、重要的、复杂的方法,可以考虑作为模板方法。

    注意事项:为防止恶意操作,一般模板方法都加上 final 关键词。
    --------------------- 

  • 相关阅读:
    linux 配置文件.conf 非打印字符出错的研究(一)
    Python:Relative import 相对路径 ValueError: Attempted relative import in non-package
    GitHub desktop 管理 gitee 私有库
    python enumerate ,range下标迭代
    everything http服务器局域网不能访问 // Windows evething http server connect timeout in lan
    python install jnius, sikuli ;Exception: Unable to determine JDK_HOME
    sublime3 自定义 修改 颜色主题 配色方案
    python K线 蜡烛图
    IOError: [Errno 22] invalid mode ('rb') or filename: ’u202a’ / 'xe2x80xaa’
    [资源]汇集最有用的PHP资源
  • 原文地址:https://www.cnblogs.com/ly570/p/10954543.html
Copyright © 2020-2023  润新知