万网虚拟云空间怎么建设网站,北京橙乐视觉广告有限公司,优化网站排名解析推广,合肥房产网官网首页模版方法模式#xff1a;定义一个操作中的算法的框架#xff0c;而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些步骤。
抽象模版的方法分为两类#xff1a;
1. 基本方法也叫基本操作#xff0c;是由子类实现的方法#xff0c;并且在…模版方法模式定义一个操作中的算法的框架而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些步骤。
抽象模版的方法分为两类
1. 基本方法也叫基本操作是由子类实现的方法并且在模版方法被调用。
2. 模版方法可以有一个或者几个一般是一个具体方法也就是一个框架实现对基本方法的调度完成固定的逻辑。为防止恶意的操作一般模版方法加上final关键字不允许被覆写。
具体模版实现父类所定义的一个或多个抽象方法。
抽象模版中的基本方法尽量设计成protected类型不需要暴露的属性或者方法尽量不要设计为protected。实现类若非必要尽量不要扩大父类中的访问权限。 package com.juno.TemplateMethodPattern;
// 抽象模版类
public abstract class AbstractClass {// 基本方法protected abstract void doSomething();// 基本方法protected abstract void doAnything();// 基本方法protected boolean needDoSomething() {return true;}// 模版方法public final void templateMethod() {/*** 调用基本方法完成相关的逻辑*/this.doAnything();if (needDoSomething()) {this.doSomething();}}
}package com.juno.TemplateMethodPattern;
// 具体模版类
public class ConcreteClass1 extends AbstractClass {// 实现基本方法Overrideprotected void doSomething() {// 业务逻辑处理System.out.println(ConcreteClass1 -- doSomething~~);}Overrideprotected void doAnything() {// 业务逻辑处理System.out.println(ConcreteClass1 -- doAnything~~);}}package com.juno.TemplateMethodPattern;
// 具体模版类
public class ConcreteClass2 extends AbstractClass {// 实现基本方法Overrideprotected void doSomething() {// 业务逻辑处理System.out.println(ConcreteClass2 -- doSomething~~);}Overrideprotected void doAnything() {// 业务逻辑处理System.out.println(ConcreteClass2 -- doAnything~~);}Overrideprotected boolean needDoSomething() {return false;}}package com.juno.TemplateMethodPattern;public class Client {public static void main(String[] args) {AbstractClass class1 new ConcreteClass1();AbstractClass class2 new ConcreteClass2();// 调用模版方法class1.templateMethod();System.out.println(---------------------);class2.templateMethod();}
}打印
ConcreteClass1 -- doAnything~~
ConcreteClass1 -- doSomething~~
---------------------
ConcreteClass2 -- doAnything~~