模板方法模式 朴灿烈づ我的快乐病毒、 2021-09-10 06:18 328阅读 0赞 > Java的集合就是一个典型的,利用了模板方法模式的例子。Java集合中的Collection集合包括List和Set两大组成部分。List是队列,而Set是没有重复元素的集合。它们共同的接口都在Collection接口声明;例如,都包含了size(),isEmpty()方法。而AbstractCollection这个抽象类则实现了它们共同的方法,其余未实现的方法定义为抽象方法。List和Set的实例类,就是通过继承AbstractCollection(或它的子类),省去了许多重复性编码的工作! ![5057999-8c67a956fd4d35e3.png][] #### 模板方法 #### 一个模板方法是定义在抽象类中的,把基本操作方法组合在一起形成一个总算法或一个总行为的方法。 一个抽象类可以有任意多个模板方法,而不限于一个。每一个模板方法都可以调用任意多个具体方法。 #### 基本方法 #### 基本方法又可以分为三种:抽象方法(Abstract Method)、具体方法(Concrete Method)和钩子方法(Hook Method)。 • 抽象方法: 一个抽象方法由抽象类声明,由具体子类实现。在Java语言里抽象方法以abstract关键字标示。 • 具体方法: 一个具体方法由抽象类声明并实现,而子类并不实现或置换。 • 钩子方法: 一个钩子方法由抽象类声明并实现,而子类会加以扩展。通常抽象类给出的实现是一个空实现,作为方法的默认实现。 abstract public class AbstractClass { // 模板方法 public void templateMethod(){ hookMethod(); //调用基本方法(由子类实现) abstractMethod(); //调用基本方法(由子类实现) concreteMethod(); //调用基本方法(已经实现) } // 基本方法的声明(由子类实现,但抽象模板给出了默认实现) public void hookMethod() {} // 基本方法的声明(由子类实现) public abstract void abstractMethod(); // 基本方法(已经实现) public final void concreteMethod(){ // do something } } public class ConcreteClass extends AbstractClass { // 基本方法的实现 @Override public void hookMethod() { // do something } // 基本方法的实现 @Override public void abstractMethod() { // do something } } -------------------- 具体代码参考: 抽象模板类: abstract public class Account { protected String accountNumber; public Account() { accountNumber = null; } public Account(String accountNumber) { this.accountNumber = accountNumber; } // 模板方法,计算利息数额 public final double calculateInterest(){ double interestRate = doCalculateInterestRate(); String accountType = doCalculateAccountType(); double amount = calculateAmount(accountType, accountNumber); return amount * interestRate; } // 基本方法留给子类实现 protected abstract String doCalculateAccountType(); // 基本方法留给子类实现 protected abstract double doCalculateInterestRate(); // 基本方法,已经实现 private double calculateAmount(String accountType, String accountNumber){ // retrive amount from database return 7243.00D; } } 具体子类实现 public class MoneyMarketAccount extends Account { @Override protected String doCalculateAccountType() { return "Money Market"; } @Override protected double doCalculateInterestRate() { return 0.045D; } } 参考:[http://wangkuiwu.github.io/2012/10/27/design\_pattern/][http_wangkuiwu.github.io_2012_10_27_design_pattern] [5057999-8c67a956fd4d35e3.png]: /images/20210811/67f3039609a7484cabf68e733c56a930.png [http_wangkuiwu.github.io_2012_10_27_design_pattern]: https://link.jianshu.com?t=http://wangkuiwu.github.io/2012/10/27/design_pattern/
相关 模板方法模式 定义 > 定义一个操作中的算法框架,而将一些步骤延迟到子类中,使得子类不改变算法的结构即可重复定义算法的某些特点步骤 角色 > AbstractClass抽象 àì夳堔傛蜴生んèń/ 2022年06月03日 03:53/ 0 赞/ 139 阅读
相关 模板方法模式 1.使用场景: 当实现一个算法的时候,这个算法的整体步骤是固定的,但是某一些算法可能会进行更改。易变的部分我们可以抽取出来,供子类实现。比较常见的应用有Junit单元测试S 小鱼儿/ 2022年05月31日 09:14/ 0 赞/ 146 阅读
相关 模板方法模式 模板方法模式 一、概述 1. 模板方法模式是编程中经常用到的模式。它定义了一个操作中的算法骨架,将某些步骤延迟到子类中实现。这样,新的子类可以在不改变一个算法结构 约定不等于承诺〃/ 2022年04月17日 00:16/ 0 赞/ 205 阅读
相关 模板方法模式 我们思考这么一种场景,课堂上老师在黑板即兴出几道题,学生在下面在手抄黑板上的题目,这个时候前面的同学可能能抄对题目,但后面的同学可能因为太远看不清老师写的字,或者说老师写错了一 我就是我/ 2022年01月30日 05:49/ 0 赞/ 220 阅读
相关 模板方法模式 最近看书又遇到模板方法模式,具体是在同步器(AQS)的内容上。就顺便再来回顾下。 同步器AbstractQueuedSynchronizer(AQS)是一个抽象类。其中定义了 墨蓝/ 2021年10月18日 11:34/ 0 赞/ 304 阅读
相关 模板方法模式 生活中有很多按步骤才能完成的事,比如我们想进房间,需要先将门打来,然后才能进去,进去之后再把门关上。开门和关门是固定的步骤,而进入房间的步骤则不是固定的,它可以有多种方式,走着 约定不等于承诺〃/ 2021年10月15日 06:45/ 0 赞/ 335 阅读
相关 模板方法模式 什么叫做模板方法模式? 在定义功能时,功能的一部分是确定的但是有一部分是不确定的,而确定的部分在使用不确定的部分。那么这时就将不确定的部分暴露出来,由该类的子类去实现。 清疚/ 2021年09月18日 15:40/ 0 赞/ 368 阅读
相关 模板方法模式 14.模板方法模式 ![70][] class Client { static void Main(string[] a 阳光穿透心脏的1/2处/ 2021年09月17日 00:02/ 0 赞/ 275 阅读
相关 模板方法模式 > Java的集合就是一个典型的,利用了模板方法模式的例子。Java集合中的Collection集合包括List和Set两大组成部分。List是队列,而Set是没有重复元素的集 朴灿烈づ我的快乐病毒、/ 2021年09月10日 06:18/ 0 赞/ 329 阅读
相关 模板方法模式 一 点睛 在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些 深藏阁楼爱情的钟/ 2021年07月24日 20:53/ 0 赞/ 415 阅读
还没有评论,来说两句吧...