标签:11 子类 void System println 设计模式 public 模板
一、定义
模板模式定义:定义一个算法骨架,并将某些步骤推迟到子类中实现。模板模式可以让子类在不改变算法整体结构的情况下,重新定义算法中的某些步骤。使用模板方法模式可以将代码的公共行为提取,以达到复用的目的。而对于特殊化的行为在子类中实现。父类的模板方法可以控制子类中的具体实现。子类无需了解整体算法框架,只需实现自己的业务逻辑即可。
二、实现方式
模板方法模式中的三类角色
1、具体方法(Concrete Method)
2、抽象方法(Abstract Method)
3、钩子方法(Hook Method)
首先父类会定义一个算法的框架,即实现算法所必须的所有方法。其中,具有共性的代码放在父类的具体方法中。各个子类特殊性的代码放在子类的具体方法中。但是父类中需要有对应抽象方法声明。钩子方法可以让子类决定是否对算法的不同点进行挂钩(实现)。
模板类:
1 /** 2 * 模板类 3 */ 4 public abstract class AbstractTemplete { 5 public void templeteMethod(){ 6 System.out.println("通用步骤1"); 7 //抽象方法 - 子类方法1 8 indivMethod1(); 9 //钩子方法,子类决定是否需要执行方法2 10 if (hook()){ 11 indivMethod2(); // 抽象方法 - 子类方法2 12 } 13 //通用步骤3 14 System.out.println("通用步骤3"); 15 } 16 17 18 // 个性化操作,在子类中具体实现 19 public abstract void indivMethod1(); 20 21 // 个性化操作,在子类中具体实现 22 public abstract void indivMethod2(); 23 24 //钩子方法,决定子类需不需要执行 25 public abstract boolean hook(); 26 27 }
子类1:
public class Indiv01 extends AbstractTemplete{ @Override public void indivMethod1() { System.out.println("子类1 - 个性化操作1"); } @Override public void indivMethod2() { System.out.println("子类1 - 个性化操作2"); } @Override public boolean hook() { return false; } }
子类2:
public class Indiv02 extends AbstractTemplete{ @Override public void indivMethod1() { System.out.println("子类2 - 个性化操作1"); } @Override public void indivMethod2() { System.out.println("子类2 - 个性化操作2"); } /**
* 钩子方法
**/
@Override public boolean hook() { return true; } }
执行类:
public static void main(String[] args) { Indiv01 indiv01 = new Indiv01(); Indiv02 indiv02 = new Indiv02(); indiv01.templeteMethod(); System.out.println("-------------------"); indiv02.templeteMethod(); }
结果:
通用步骤1
子类1 - 个性化操作1
通用步骤3
-------------------
通用步骤1
子类2 - 个性化操作1
子类2 - 个性化操作2
通用步骤3
三、使用场景(待补充)
标签:11,子类,void,System,println,设计模式,public,模板 来源: https://www.cnblogs.com/baopeer/p/16634360.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。