浅谈设计模式 : 模板方法模式

编程入门 行业动态 更新时间:2024-10-20 16:03:21

浅谈设计<a href=https://www.elefans.com/category/jswz/34/1771241.html style=模式 : 模板方法模式"/>

浅谈设计模式 : 模板方法模式

前言

今天来学习行为型模式的第一种-模板方法。

🌈为你的简历而打工。

真正能给你撑腰的丰富的技能储备、足够的经济基础、持续的情绪稳定、可控的生活节奏、和那个打不败的自己。为你的简历打工,把时间花在正事上,变成自己打心底里喜欢的人

一、入门

按照制定好的模板来干事,比如交给你一份试题,按照模板填写自己的答案即可,只不过每个人填的内容不一样。对应业务场景就是,确定了业务逻辑的关键步骤及其执行顺序,但是某些步骤的具体实现还未知,或者某些步骤的实现与具体的环境有关。

模板方法模式 : 定义了一个算法的步骤,并允许子类别为一个或多个步骤提供其实践方式。让子类别在不改变算法架构的情况下,重新定义算法中的某些步骤。

比如模板模式的下图中,规定了1、2、3 三点,但每个小人些的答案不一样,我们规定好1、2、3这个固定流程后,在针对各个流程做具体的不同的实现。这就是模板方法模式。

模板方法(Template Method)模式包含以下主要角色:

  • 抽象类:负责给出一个算法的轮廓和骨架,它由一个模板方法和若干个基本方法构成。
    • 模板方法:定义了算法的骨架,按某种顺序调用执行不同基本方法
    • 基本方法:是实现算法各个步骤的方法,又可分为三种:
      • 抽象方法:一个抽象方法由抽象类声明,由具体子类实现
      • 具体方法:具体方法可以由抽象类或其子类声明实现
      • 钩子方法:在抽象类种已经实现,包括用于判断的逻辑方法和需要子类重写的空方法两种。一般用于逻辑判断,返回值是boolean,方法名是 isXxx
  • 具体子类:实现抽象类中所定义的抽象方法和钩子方法

二、面试案例实战

以面试流程为例,定义一个抽象类 AbstractMs , 通过它来定义我们方法执行的步骤,大概分为四步,第一步:打电话邀约;第二步:技术一面;第三步:技术二面;第四面:hr 面。

然后每个面试者都走这个流程,在这个公司的执行标准上,后面的开发实现人员就不用关心这个执行顺序,按照这个流程走即可。

抽象类:

public abstract class AbstratMs {/*** 面试过程*/public final void interviewProcess(){// 第一步 打电话约面试this.phone();// 第二步 一轮技术面this.ITOne();// 第三步 二轮技术面this.iTTow();// 第三步 HR面this.hr();}// 打电话约面试protected void phone() {System.out.println("打电话约面试时间");}protected abstract void ITOne();protected abstract void iTTow();protected abstract void hr();}
复制代码

具体类重写:

public class ConcertMan extends AbstratMs{@Overrideprotected void ITOne() {System.out.println("这一面不难啊");}@Overrideprotected void iTTow() {System.out.println("这面试官有点面善");}@Overrideprotected void hr() {System.out.println("hr让我去谈薪");}
}
复制代码
public class ConcertMan2 extends AbstratMs{@Overrideprotected void ITOne() {System.out.println("面试题好难!");}@Overrideprotected void iTTow() {System.out.println("没看到二面面试官,难道他请假了?");}@Overrideprotected void hr() {System.out.println("hr 姐姐让我回去等通知?");}
}
复制代码

客户端测试:

public class Test {public static void main(String[] args) {ConcertMan concertMan = new ConcertMan();concertMan.interviewProcess();ConcertMan2 concertMan2 = new ConcertMan2();concertMan2.interviewProcess();}
}
复制代码

执行结果

三、模板方法总结

3.1 优点:

提高代码复用性将相同部分的代码放在抽象的父类中,而将不同的代码放入不同的子类中。实现了反向控制通过一个父类调用其子类的操作,通过对子类的具体实现扩展不同的行为,实现了反向控制 ,并符合“开闭原则”。

3.2 缺点

对每个不同的实现都需要定义一个子类,这会导致类的个数增加,系统更加庞大,设计也更加抽象。父类中的抽象方法由子类实现,子类执行的结果会影响父类的结果,这导致一种反向的控制结构,它提高了代码阅读的难度。

3.3 使用场景

算法的整体步骤很固定,但其中个别部分易变时,这时候可以使用模板方法模式,将容易变的部分抽象出来,供子类实现。 需要通过子类来决定父类算法中某个步骤是否执行,实现子类对父类的反向控制

🚀 最后,模板方法貌似是学过来最简单的一种,也希望大家都能按照上面面试案例的第一个实现一样,都有一个好结果,感谢阅读!

更多推荐

浅谈设计模式 : 模板方法模式

本文发布于:2024-02-05 10:32:18,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1744854.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:模式   浅谈   模板   方法

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!