Loading... # 设计模式(八)——模板方法模式 ## 参考 > 大话设计模式  ——  程杰 著 ## 目录 [设计模式(一)——简单工厂模式](https://www.princelei.club/archives/67.html) [设计模式(二)——策略模式](https://www.princelei.club/archives/68.html) [设计模式(三)——设计原则](https://www.princelei.club/archives/116.html) [设计模式(四)——装饰模式](https://www.princelei.club/archives/117.html) [设计模式(五)——代理模式](https://www.princelei.club/archives/119.html) [设计模式(六)——工厂方法模式](https://www.princelei.club/archives/132.html) [设计模式(七)——原型模式](https://www.princelei.club/archives/133.html) [设计模式(八)——模板方法模式](https://www.princelei.club/archives/134.html) [设计模式(九)——外观模式](https://www.princelei.club/archives/135.html) [设计模式(十)——建造者模式](https://www.princelei.club/archives/136.html) [设计模式(十一)——观察者模式](https://www.princelei.club/archives/137.html) [设计模式(十二)——抽象工厂模式](https://www.princelei.club/archives/138.html) [设计模式(十三)——状态模式](https://www.princelei.club/archives/139.html) [设计模式(十四)——适配器模式](https://www.princelei.club/archives/140.html) [设计模式(十五)——备忘录模式](https://www.princelei.club/archives/141.html) [设计模式(十六)——组合模式](https://www.princelei.club/archives/147.html) [设计模式(十七)——迭代器模式](https://www.princelei.club/archives/148.html) [设计模式(十八)——单例模式](https://www.princelei.club/archives/157.html) [设计模式(十九)——桥接模式](https://www.princelei.club/archives/159.html) [设计模式(二十)——命令模式](https://www.princelei.club/archives/160.html) [设计模式(二十一)——职责链模式](https://www.princelei.club/archives/161.html) [设计模式(二十二)——中介者模式](https://www.princelei.club/archives/162.html) [设计模式(二十三)——享元模式](https://www.princelei.club/archives/163.html) [设计模式(二十四)——解释器模式](https://www.princelei.club/archives/173.html) [设计模式(二十五)——访问者模式](https://www.princelei.club/archives/174.html) ## 何为模板方法模式 - 模板方法模式,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 当我们要完成某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法模式来处理。 ## 模板方法模式实现一份试卷多人答题 ``` /** * 金庸小说考题试卷 */ public abstract class TestParper { //试题1 public void testQuestion1(){ System.out.println("杨过得到,后来给了郭靖,炼成倚天剑,屠龙刀的玄铁可能是[ ] a.球磨铸铁 " + "b.马口铁 c.高速合金钢 d.碳素纤维"); System.out.println("答案:"+answer1()); } //试题2 public void testQuestion2(){ System.out.println("杨过、程英、陆无双铲除了情花,造成[ ] a.使这种植物不再害人 b.使一种" + "珍稀物种灭绝 c.破坏了那个生物圈的生态平衡 d.造成该地区沙漠化"); System.out.println("答案:"+answer2()); } //试题3 public void testQuestion3(){ System.out.println("蓝凤凰致使华山师徒、桃谷六仙呕吐不止,如果你是大夫,会给他们开什么药[ ] " + "a.阿司匹林 b.牛黄解毒片 c.氟哌酸 d.让他们喝大量的牛奶 e.以上全不对"); System.out.println("答案:"+answer3()); } protected abstract String answer1(); protected abstract String answer2(); protected abstract String answer3(); } ``` ``` /** * 学生甲的试卷 */ public class TestParperA extends TestParper{ @Override protected String answer1() { return "b"; } @Override protected String answer2() { return "c"; } @Override protected String answer3() { return "a"; } } ``` ``` /** * 学生乙的试卷 */ public class TestParperB extends TestParper { @Override protected String answer1() { return "c"; } @Override protected String answer2() { return "a"; } @Override protected String answer3() { return "a"; } } ``` ``` /** * 客户端 */ public class MubanMethodMainClass { public static void main(String[] args) { System.out.println("学生甲的试卷"); TestParper studentA = new TestParperA(); studentA.testQuestion1(); studentA.testQuestion2(); studentA.testQuestion3(); System.out.println("学生乙的试卷"); TestParper studentB = new TestParperB(); studentB.testQuestion1(); studentB.testQuestion2(); studentB.testQuestion3(); } } ``` 要有更多的学生来答试卷,只不过是在试卷模板上填写选择题的选项答案,这是每个人试卷唯一的不同。 模板方法模式是通过把不变行为搬移到超类,去除子类中的重复代码来体现它的优势。模板方法模式就是提供了一个很好的代码复用平台。当不变和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。通过模板方法模式把这些行为搬移到单一的地方,这样就帮助子类摆脱重复的不变行为的纠缠。 Last modification:June 11th, 2020 at 06:26 pm © 允许规范转载
?技术类评语?
文章的叙述风格独特,用词精准,让人回味无穷。