006.设计模式之模板模式

来源:互联网 发布:土木转金融 知乎 编辑:程序博客网 时间:2024/05/17 23:33

模板模式:
概念:定义一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重定义该算法中的特定步骤
要素:
1.抽象方法,只做声明,不加以实现
2.模板方法:声明并加以实现
3.钩子方法:有抽象类声明并加以实现,由模板类进行扩展

优点:
1.容易扩展
2.便于维护
3.比较灵活

使用场景:
1.当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细层面上的实现可能不同时,我们通常用模板方法模式来处理。

代码结构

模板方法package com.shenghuoquaner.design.Template;public abstract class TemplateMethod {    public void testPaper() {        System.out.println("题目一:杨过没等到小龙女会怎么办? A:跳崖 B:娶郭襄");        System.out.println("题目二:郭襄如果嫁给杨过了,会创建峨眉派吗? A:会 B:不会");        String studentName = studentName();        System.out.println(studentName + "题目一的答案是: " + answer1());        System.out.println(studentName + "题目二的答案是: " + answer2());        System.out.println();    }    public abstract String studentName();    public abstract String answer1();    public abstract String answer2();}
package com.shenghuoquaner.design.Template;public class StudentPaper1 extends TemplateMethod {    public StudentPaper1() {    }    @Override    public String answer1() {        return "A";    }    @Override    public String answer2() {        return "B";    }    @Override    public String studentName() {        return "北国";    }}
package com.shenghuoquaner.design.Template;public class StudentPaper2 extends TemplateMethod {    public StudentPaper2() {    }    @Override    public String answer1() {        return "B";    }    @Override    public String answer2() {        return "A";    }    @Override    public String studentName() {        return "北北";    }}
package com.shenghuoquaner.design.Template;public class Test {    public static void main(String[] args) {        TemplateMethod tm1 = new StudentPaper1();        tm1.testPaper();        TemplateMethod tm2 = new StudentPaper2();        tm2.testPaper();    }}
运行结果:题目一:杨过没等到小龙女会怎么办? A:跳崖 B:娶郭襄题目二:郭襄如果嫁给杨过了,会创建峨眉派吗? A:会 B:不会北国题目一的答案是: A北国题目二的答案是: B题目一:杨过没等到小龙女会怎么办? A:跳崖 B:娶郭襄题目二:郭襄如果嫁给杨过了,会创建峨眉派吗? A:会 B:不会北北题目一的答案是: B北北题目二的答案是: A
0 0