Java 23种设计模式之模板方法模式
2018-01-01 19:12
351 查看
1. 概念
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,模版方法使得 子类可以不改变一个算法的结构即可重定义该算法的某一些特定步骤。
2. 定义抽象模版
public abstract class TestPaper { protected String userName; public TestPaper(String userName){ this.userName = userName; } public void testQuestiton1(){ System.out.println("小哥我帅不帅"); System.out.println(userName+" 的回答:"+getAnswer1()); } public void testQuestiton2(){ System.out.println("小哥我努力不努力"); System.out.println(userName+" 的回答:"+getAnswer2()); } public void testQuestiton3(){ System.out.println("小哥我能月入20不"); System.out.println(userName+" 的回答:"+getAnswer3()); } public void testQuestiton4(){ System.out.println("小哥我能找到对象不"); System.out.println(userName+" 的回答:"+getAnswer4()); } public void testQuestiton5(){ System.out.println("小哥我好困啊,有没有"); System.out.println(userName+" 的回答:"+getAnswer5()); } public void templateMethod(){ testQuestiton1(); testQuestiton2(); testQuestiton3(); testQuestiton4(); testQuestiton5(); } public String getAnswer1(){ return ""; } public String getAnswer2(){ return ""; } public String getAnswer3(){ return ""; } public String getAnswer4(){ return ""; } public String getAnswer5(){ return ""; } }
3. 封装具体的模版
1. public class TestPaperA extends TestPaper{ public TestPaperA(String userName) { super(userName); } @Override public String getAnswer1() { return "帅"; } @Override public String getAnswer2() { return "努力"; } @Override public String getAnswer3() { return "能"; } @Override public String getAnswer4() { return "必须的能"; } @Override public String getAnswer5() { return "不困到天明"; } } 2. public class TestPaperB extends TestPaper{ public TestPaperB(String userName) { super(userName); } @Override public String getAnswer1() { return "还行"; } @Override public String getAnswer2() { return "还好"; } @Override public String getAnswer3() { return "可以的"; } @Override public String getAnswer4() { return "没问题"; } @Override public String getAnswer5() { return "小困,可以坚持下"; } } 3. public class TestPaperC extends TestPaper{ public TestPaperC(String userName) { super(userName); } @Override public String getAnswer1() { return "好看的皮囊千篇一律,有趣的灵魂万里挑一"; } @Override public String getAnswer2() { return "没有最努力,只有更努力"; } @Override public String getAnswer3() { return "月入百万不是梦"; } @Override public String getAnswer4() { return "迎娶白富美"; } @Override public String getAnswer5() { return "困毛线,接着干"; } }
4. 测试类
@org.junit.Test public void test(){ TestPaper studentA = new TestPaperA("zlc"); studentA.templateMethod(); System.out.println("----------------------"); TestPaper studentB = new TestPaperB("cc"); studentB.templateMethod(); System.out.println("----------------------"); TestPaper studentC = new TestPaperC("lecheng"); studentC.templateMethod(); }
5.小结
模版方法模式提供了一个很好的代码复用平台,通过 把不变行为搬移到超类,去除子类中的重复代码来体现它的优势。
相关文章推荐
- java23种常用设计模式之模板方法模式(Template Method)
- 【行为型模式】模板方法模式(template method)之23种java设计模式
- Java23种设计模式之-----模板方法模式
- Java开发中的23种设计模式之十四:模板方法模式(Template Method)
- 走穿java23种设计模式--13模板方法模式详解
- java_23种设计模式之模板方法模式
- Java开发中的23种设计模式详解----模板方法模式(Template Method)
- java(2) 设计模式-模板方法设计模式
- Java模式设计之模板方法模式
- Java设计模式七:模板方法(Template Method)
- 23种设计模式之模板方法(Template Method)
- GoF23种设计模式之行为型模式之模板方法
- java设计模式——模板方法模式
- java设计模式之模板方法
- Java设计模式之模板方法
- java设计模式之模板方法模式
- java设计模式---Template Method模板方法---实际处理交给子类
- 《Java基础学习笔记》JAVA设计模式之模板方法
- Java设计模式 Design Pattern:模板方法 Template Method
- Java设计模式—模板方法(Template Method)