《大话设计模式》java实现之模版方法模式
来源:互联网 发布:淘宝怎么无理由退货 编辑:程序博客网 时间:2024/06/18 05:18
模版方法模式比较简单,就是把相同的代码放在父类,子类实现各自不同的逻辑
UML
代码结构
public class Client { public static void main(String[] args) { System.out.println("学生甲抄的试卷:"); TestPaper studentA = new TestPaperA(); //与书中不同,这里的studentA是TestPaper类型 //而不是TestPaperA类型 studentA.testQuestion1(); studentA.testQuestion2(); System.out.println("学生乙抄的试卷:"); TestPaper studentB = new TestPaperB(); //与书中不同,这里的studentA是TestPaper类型 //而不是TestPaperA类型 studentB.testQuestion1(); studentB.testQuestion2(); }}
书中使用模版方法模式后没有写Client的代码,没有使用模式的代码中Client与这里稍有不同,因为书中没有使用模式的代码中TestPaperA和TestPaperB并没有公共的父类
public abstract class TestPaper { public void testQuestion1() { System.out.println("杨过得到,后来给了过境,练成倚天剑、屠龙刀的玄铁可能是[] " + "a.球磨铸铁 b.马口铁 c.高速和金刚 d.碳素纤维"); System.out.println("答案: " + answer1()); } public void testQuestion2() { System.out.println("杨过、程英、陆无双铲除了情花,造成[] a.使这种植物不再害人 b.使一种珍稀物种灭绝 " + " c.破坏了那个生物圈的生态平衡 d.造成该地区沙漠化"); System.out.println("答案: " + answer2()); } public abstract String answer1(); public abstract String answer2();}
public class TestPaperA extends TestPaper { @Override public String answer1() { return "b"; } @Override public String answer2() { return "c"; }}
public class TestPaperB extends TestPaper { @Override public String answer1() { return "c"; } @Override public String answer2() { return "a"; }}
结果
模版方法应用比较多,比如在业务逻辑多变的场景中,定义一个父类做一下固定的业务逻辑(如日志、参数验证),然后把变化的业务定义为abstract方法,在具体子类中实现即可。
阅读全文
0 0
- 《大话设计模式》java实现之模版方法模式
- 大话设计模式之模版方法模式
- 《大话设计模式》java实现之工厂方法模式
- Java设计模式之模版方法模式
- 大话设计模式阅读笔记-模版方法模式
- java设计模式大话之工厂方法模式
- scala实现设计模式之模版方法模式
- 大话设计模式之状态模式(java版实现)
- 《大话设计模式》java实现之简单工厂模式
- 《大话设计模式》java实现之策略模式
- 《大话设计模式》java实现之装饰器模式
- 《大话设计模式》java实现之代理模式
- 《大话设计模式》java实现之原型模式
- 《大话设计模式》java实现之外观模式
- 《大话设计模式》java实现之建造者模式
- 《大话设计模式》java实现之观察者模式
- 《大话设计模式》java实现之抽象工厂模式
- 《大话设计模式》java实现之状态模式
- [arc068e]Snuke Line
- html基础-框架、同(异)页面跳转、<a>标签
- UVa 227
- Unity Photon服务器(二)
- WIN64驱动编程基础教程(福利:过WIN7/8/8.1签名强制的LIB、过WIN7“补丁守卫”的SRC、吊销的正规数字签名)
- 《大话设计模式》java实现之模版方法模式
- OpenCV-Python-Tutorial[6]
- 1041. 考试座位号(15)
- git状态和区分
- Unity中JSON文件的读取
- github上,README上传效果图
- CSS3 颜色渐变
- 比MD5最安全的PHP加密方法
- 使用Ctrlbox项目管理软件的设计快速定稿心得