07-模板模式

07-模板模式

概念

模板模式是一种常见的设计模式,在实现中经常可以看到,具体的使用场景为:整体流程大致相同,其中有部分方法实现不同。

例子

本文给出《大话设计模式》书中的例子,所有的试卷,除了答案不一样,其他的东西都一样

package com.gof.template;

/**
 * 功能描述
 *
 * @since 2023-01-20
 */
public abstract class TestPaper {
    abstract String answer1();

    abstract String answer2();

    abstract String answer3();

    void answerQuestion1() {
        System.out.println("题目一");
        System.out.println(answer1());
    }

    void answerQuestion2() {
        System.out.println("题目二");
        System.out.println(answer2());
    }

    void answerQuestion3() {
        System.out.println("题目三");
        System.out.println(answer3());
    }
}
package com.gof.template;

/**
 * 功能描述
 *
 * @since 2023-01-20
 */
public class TestPaparStudent1 extends TestPaper {
    @Override
    String answer1() {
        return "答案一";
    }

    @Override
    String answer2() {
        return "答案二";
    }

    @Override
    String answer3() {
        return "答案二";
    }
}
package com.gof.template;

/**
 * 功能描述
 *
 * @since 2023-01-20
 */
public class TestPaparStudent2 extends TestPaper {
    @Override
    String answer1() {
        return "答案1";
    }

    @Override
    String answer2() {
        return "答案2";
    }

    @Override
    String answer3() {
        return "答案3";
    }
}
package com.gof.template;

/**
 * 功能描述
 *
 * @since 2023-01-20
 */
public class Client {
    public static void main(String[] args) {
        TestPaparStudent1 paparStudent1 = new TestPaparStudent1();
        paparStudent1.answerQuestion1();
        paparStudent1.answerQuestion2();
        paparStudent1.answerQuestion3();
        TestPaparStudent2 paparStudent2 = new TestPaparStudent2();
        paparStudent2.answerQuestion1();
        paparStudent2.answerQuestion2();
        paparStudent2.answerQuestion3();
    }
}

总结

模板方法的模式是通过把不变的逻辑移到超类,去除子类中的重复代码来体现其优势的,提供了一个很好的代码复用平台
当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。通过模板方法模式吧这些行为搬移到单一的地方去,这样就帮助子类拜托重复的不变行为的纠缠。

posted @ 2023-01-20 09:57  Oh,mydream!  阅读(40)  评论(0编辑  收藏  举报