参考文章

模板方法模式

模板方法模式

定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。它是一种类行为型模式。

例如,去银行办理业务一般要经过以下4个流程:取号、排队、办理具体业务、对银行工作人员进行评分等,其中取号、排队和对银行工作人员进行评分的业务对每个客户是一样的,可以在父类中实现,但是办理具体业务却因人而异,它可能是存款、取款或者转账等,可以延迟到子类中实现。

构与实现

抽象类(Abstract Class):负责给出一个算法的轮廓和骨架。它由一个模板方法和若干个基本方法构成。这些方法的定义如下。

① 模板方法:定义了算法的骨架,按某种顺序调用其包含的基本方法。
② 基本方法:是整个算法中的一个步骤,包含以下几种类型。
抽象方法:在抽象类中申明,由具体子类实现。
具体方法:在抽象类中已经实现,在具体子类中可以继承或重写它。
钩子方法:在抽象类中已经实现,包括用于判断的逻辑方法和需要子类重写的空方法两种。

具体子类(Concrete Class):实现抽象类中所定义的抽象方法和钩子方法,它们是一个顶级逻辑的一个组成步骤。

package templateMethod;
public class TemplateMethodPattern
{public static void main(String[] args){AbstractClass tm=new ConcreteClass();tm.TemplateMethod();}
}
//抽象类
abstract class AbstractClass
{public void TemplateMethod() //模板方法{SpecificMethod();abstractMethod1();          abstractMethod2();}  public void SpecificMethod() //具体方法{System.out.println("抽象类中的具体方法被调用...");}   public abstract void abstractMethod1(); //抽象方法1public abstract void abstractMethod2(); //抽象方法2
}
//具体子类
class ConcreteClass extends AbstractClass
{public void abstractMethod1(){System.out.println("抽象方法1的实现被调用...");}   public void abstractMethod2(){System.out.println("抽象方法2的实现被调用...");}
}

应用实例

出国留学手续一般经过以下流程:索取学校资料,提出入学申请,办理因私出国护照、出境卡和公证,申请签证,体检、订机票、准备行装,抵达目标学校等,其中有些业务对各个学校是一样的,但有些业务因学校不同而不同,所以比较适合用模板方法模式来实现。

package templateMethod;
public class StudyAbroadProcess
{public static void main(String[] args){StudyAbroad tm=new StudyInAmerica();tm.TemplateMethod();}
}
//抽象类: 出国留学
abstract class StudyAbroad
{public void TemplateMethod() //模板方法{LookingForSchool(); //索取学校资料ApplyForEnrol();    //入学申请      ApplyForPassport(); //办理因私出国护照、出境卡和公证ApplyForVisa();     //申请签证ReadyGoAbroad();    //体检、订机票、准备行装Arriving();         //抵达}              public void ApplyForPassport(){System.out.println("三.办理因私出国护照、出境卡和公证:");System.out.println("  1)持录取通知书、本人户口簿或身份证向户口所在地公安机关申请办理因私出国护照和出境卡。");System.out.println("  2)办理出生公证书,学历、学位和成绩公证,经历证书,亲属关系公证,经济担保公证。");}public void ApplyForVisa(){System.out.println("四.申请签证:");System.out.println("  1)准备申请国外境签证所需的各种资料,包括个人学历、成绩单、工作经历的证明;个人及家庭收入、资金和财产证明;家庭成员的关系证明等;");System.out.println("  2)向拟留学国家驻华使(领)馆申请入境签证。申请时需按要求填写有关表格,递交必需的证明材料,缴纳签证。有的国家(比如美国、英国、加拿大等)在申请签证时会要求申请人前往使(领)馆进行面试。");}public void ReadyGoAbroad(){System.out.println("五.体检、订机票、准备行装:");System.out.println("  1)进行身体检查、免疫检查和接种传染病疫苗;");System.out.println("  2)确定机票时间、航班和转机地点。");}public abstract void LookingForSchool();//索取学校资料public abstract void ApplyForEnrol();   //入学申请public abstract void Arriving();        //抵达
}
//具体子类: 美国留学
class StudyInAmerica extends StudyAbroad
{@Overridepublic void LookingForSchool(){System.out.println("一.索取学校以下资料:");System.out.println("  1)对留学意向国家的政治、经济、文化背景和教育体制、学术水平进行较为全面的了解;");System.out.println("  2)全面了解和掌握国外学校的情况,包括历史、学费、学制、专业、师资配备、教学设施、学术地位、学生人数等;");System.out.println("  3)了解该学校的住宿、交通、医疗保险情况如何;");System.out.println("  4)该学校在中国是否有授权代理招生的留学中介公司?");System.out.println("  5)掌握留学签证情况;");System.out.println("  6)该国政府是否允许留学生合法打工?");System.out.println("  8)毕业之后可否移民?");System.out.println("  9)文凭是否受到我国认可?");}@Overridepublic void ApplyForEnrol(){System.out.println("二.入学申请:");System.out.println("  1)填写报名表;");System.out.println("  2)将报名表、个人学历证明、最近的学习成绩单、推荐信、个人简历、托福或雅思语言考试成绩单等资料寄往所申请的学校;");System.out.println("  3)为了给签证办理留有充裕的时间,建议越早申请越好,一般提前1年就比较从容。");       }@Overridepublic void Arriving(){System.out.println("六.抵达目标学校:");System.out.println("  1)安排住宿;");System.out.println("  2)了解校园及周边环境。");}
}

应用场景

  1. 算法的整体步骤很固定,但其中个别部分易变时,这时候可以使用模板方法模式,将容易变的部分抽象出来,供子类实现。

java设计模式-模板方法模式相关推荐

  1. Java设计模式-模板方法模式详解

    Java设计模式-模板方法模式 文章目录 Java设计模式-模板方法模式 0.前言 1.模板方法原理 2.模板方法模式中的角色 3.模板方法模式的UML类图 4.代码实现 5.编码测试 6.模板模式中 ...

  2. Java设计模式 - 模板方法模式

    Java设计模式 - 模板方法模式 定义一个算法的骨架,并将一些步骤通过子类表达. UML图示 要点 1. 定义一个算法的骨架 - 建立一个抽象类 2. 将一些步骤通过子类表达 - 子类继承抽象类 赋 ...

  3. JAVA 设计模式 模板方法模式

    定义 模板方法模式 (Template Method) 定义了一个操作中的算法的骨架,而将部分步骤的实现在子类中完成. 模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 模 ...

  4. Java设计模式——模板方法模式【Template Method Pattern】

    一.引言 23种设计模式大概分为三大类: 5种(创建型模式):工厂方法模式.抽象工厂模式.单例模式.原型模式.建造者模式. 7种(结构型模式):适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组 ...

  5. Java设计模式—模板方法模式

    模板方法模式仅仅使用了Java的继承机制,但它是一个应用非常广泛的模式. 1.定义:           一个操作中的算法的框架,而将一些步骤延迟到子类中.使得子类可以不改变一个算法的结构即可重定义该 ...

  6. 算法模板java_我的Java设计模式-模板方法模式

    近日,ofo小黄车宣布入驻法国巴黎,正式进入全球第20个国家,共享单车已然改变了我们的出行方式.就拿我自己来说,每当下班出地铁的第一件事,以光速锁定一辆共享单车,百米冲刺的速度抢在别人之前占领它. 而 ...

  7. JAVA设计模式--模板方法模式

    目录 一.什么是模板方法模式 二.模板方法模式的结构 三.模板方法模式相关知识点 四.模板方法模式的适用性 五.模板方法模式的优缺点 六.总结 一.什么是模板方法模式 模板方法(TemplateMet ...

  8. JAVA设计模式——模板方法模式(Template Method Pattern)

    概述 模板方法模式属于行为型模式.它由一个抽象类公开定义了执行它的方法的模板(执行的方式或顺序),它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行.具体而言就是抽象类定义了某个方法的执 ...

  9. java设计模式---模板方法模式

    模板是指在薄片塑料板上面写字后挖空,再使用毛笔或色笔涂满挖空部分,就能看到纯手工而以不失工整的字样,看到模板上的挖空形状,马上就知道最后会变出什么样子的字,不过实际上所显现出来的字样还是要依所使用的画 ...

  10. Java设计模式(代理模式-模板方法模式-命令模式)

    Java设计模式Ⅴ 1.代理模式 1.1 代理模式概述 1.2 静态代理 1.2.1 静态代理概述 1.2.2 代码理解 1.3 动态代理之JDK代理 1.3.1 动态代理之JDK代理概述 1.3.2 ...

最新文章

  1. python 最快 因式分解_python中怎么对一个数进行因式分解?
  2. python词云去除词_使用Python制作一个带GUI界面的词云自动生成工具(连载五)
  3. php收集radio表单,jQuery对于单选表单(radio)以及其它表单取值
  4. 第二次Soring冲刺计划第二天(个人)
  5. 设计模式之--原型模式
  6. (priority_queue)自定义优先级
  7. Magento去除前台URL中显示的index.php
  8. mysql数据库管理命令_MySQL数据库管理基本命令
  9. 非常认真地完成现有工作,却得不到加薪待遇?
  10. 【数学建模】基于matlab模拟十字路口车辆通行【含Matlab源码 1106期】
  11. windows中判断注册表键值是否存在的一段函数
  12. 计算机病毒无法破坏压缩文件,求解压缩文件拒绝访问是怎么回事?
  13. windows7蓝牙怎么打开_避开网络限制,通过蓝牙共享网络连接
  14. oracle运动手环app,Keep智能运动手环
  15. 高职对口计算机试题ppt,高职单招中职计算机练习卷和答案.doc
  16. 【算法】【c++】打家劫舍问题
  17. 微信小程序笔记(一)初次接触小程序开发
  18. 适合零基础学习者的Java学习路线图到底长啥样?一篇文章带你学会Java
  19. WebView加载网页空白问题
  20. Linux进程间关系之守护进程

热门文章

  1. Dais-CMX系列现代计算机组成原理,dais版本计算机组成原理实验指导.doc
  2. 低代码大势所趋,RDP报表3.0应运而生
  3. 注册测绘师考试有用吗
  4. ITIL 4讲解: 变更管理
  5. MacOS Big Sur 11.5.1 (20G80) OC 0.7.1 / Cl 5138 / PE 三分区原版黑苹果镜像
  6. 功率放大器和匹配网络学习
  7. 制作Web动画——动画制作工具Flash MX
  8. 【快代理API】获取开放代理
  9. Delphi ModelMakerTools 视频教程
  10. delphi7中idHTTP的使用