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();
    }
}
总结
模板方法的模式是通过把不变的逻辑移到超类,去除子类中的重复代码来体现其优势的,提供了一个很好的代码复用平台
当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。通过模板方法模式吧这些行为搬移到单一的地方去,这样就帮助子类拜托重复的不变行为的纠缠。
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号