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

    引出模板模式:

    考试试卷问题,提炼后的代码:

    package com.disign.templetemethod;
    
    import org.junit.Test;
    
    /**
     * Created by zhen on 2017-05-17.
     */
    public class TestPaper {
        String name;
        public void setName(String name){
            this.name = name;
        }
        public TestPaper(){}
        public void testQuestionA(){
            System.out.println("1+1=? a.2 b.3 c.4 d.5");
            System.out.println("答案:" + answerA());
        }
        public void testQuestionB(){
            System.out.println("1*1=? a.1 b.2 c.3 d.4");
            System.out.println("答案:" + answerB());
        }
        public void testQuestionC(){
            System.out.println("1-1=? a.0 b.1 c.2 d.3");
            System.out.println("答案:" + answerC());
        }
    
        public String answerA(){
            return null;
        }
        public String answerB(){
            return null;
        }
        public String answerC(){
            return null;
        }
    
        public void show(){
            System.out.println(name + "的试题!");
            testQuestionA();
            testQuestionB();
            testQuestionC();
        }
    
        @Test
        public void testQuestion(){
            TestPaper studentA = new TestPaperA();
            studentA.setName("A");
            TestPaper studentB = new TestPaperB();
            studentB.setName("B");
            studentA.show();
            studentB.show();
        }
    }
    class TestPaperA extends TestPaper{
        public TestPaperA(){}
    
        @Override
        public String answerA() {
    
            return "a";
        }
    
        @Override
        public String answerB() {
            return "a";
        }
    
        @Override
        public String answerC() {
            return "a";
        }
    }
    class TestPaperB extends TestPaper{
        public TestPaperB(){}
    
        @Override
        public String answerA() {
            return "b";
        }
    
        @Override
        public String answerB() {
            return "b";
        }
    
        @Override
        public String answerC() {
            return "b";
        }
    }

    这里就用到了模板方法模式。

    模板方法模式:

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

    AbstractClass是抽象,其实也就是一抽象模板,定义并实现了一个模板方法。这个模板方法一般是一个具体方法,它给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。

    ConreteClass,实现父类所定义的一个或者多个抽象方法。每一个AbstractClass都可以有人以有任意多个ConreteClass与之对应,而每一个ConreteClass都可以给出这些抽象方法(也就是顶级逻辑的组成步骤)的不同实现,从而使得顶级逻辑的实现各不相同。

    模板方法模式的特点:

      模板方法模式是把不变行为搬移到超类,去除子类中的重复代码来体现它的优势

      模板方法模式提供了一个很好的代码复用平台

      当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现,我们使用模板方法模式,帮助子类摆脱重复的不变行为的纠缠。

  • 相关阅读:
    java正则表达式语法详解及其使用代码实例 (转)
    【SpringMVC学习09】SpringMVC与前台的json数据交互 (转)
    SpringMVC基于代码的配置方式(零配置,无web.xml)
    倒车入库操作要求
    R通过RJDBC连接外部数据库 (转)
    卡尔曼滤波——11.预测峰值
    卡尔曼滤波——10.均值漂移
    卡尔曼滤波——6.评估高斯分布
    神经网络入门——16实现一个反向传播
    神经网络入门——15反向传播
  • 原文地址:https://www.cnblogs.com/aigeileshei/p/6868792.html
Copyright © 2011-2022 走看看