设计模式--模板方法(Template Method)

C++设计模式_03_模板方法Template Method 定义一个操作中的算法的骨架(对应第二种方法的run函数) (稳定),而将一些步骤延迟(延迟一般代表定义一个虚函数,让子类去实现虚函数,也就是支持子类来变化)(变化)到子类中。Template Method使得子类可以不改变(复用)一个算法的结构,即可重定义(override 重写)该算法的某些特定步骤。—《设计模式》GoF可以参考方法二中的代码进行映射理解的。 阅读详情

模板方法(Template Method)

在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相关。

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

这样的例子在生活中还有很多,例如,一个人每天会起床、吃饭、做事、睡觉等,其中“做事”的内容每天可能不同。我们把这些规定了流程或格式的实例定义成模板,允许使用者根据自己的需求去更新它,例如,简历模板、论文模板、Word 中模板文件等。

以下介绍的模板方法模式将解决以上类似的问题。

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

  • 模板方法(Template Method)模式的优点:

  1. 它封装了不变部分,扩展可变部分。它把认为是不变部分的算法封装到父类中实现,而把可变部分算法由子类继承实现,便于子类继续扩展。
  2. 它在父类中提取了公共的部分代码,便于代码复用。
  3. 部分方法是由子类实现的,因此子类可以通过扩展方式增加相应的功能,符合开闭原则。
  • 模板方法(Template Method)模式的缺点:
  1. 对每个不同的实现都需要定义一个子类,这会导致类的个数增加,系统更加庞大,设计也更加抽象。
  2. 父类中的抽象方法由子类实现,子类执行的结果会影响父类的结果,这导致一种反向的控制结构,它提高了代码阅读的难度。
模式的结构与实现

模板方法模式需要注意抽象类与具体子类之间的协作。它用到了虚函数的多态性技术以及“不用调用我,让我来调用你”的反向控制技术。现在来介绍它们的基本结构。

1. 模式的结构

模板方法模式包含以下主要角色。

  1. 抽象类(Abstract Class):
    负责给出一个算法的轮廓和骨架。它由一个模板方法和若干个基本方法构成。这些方法的定义如下。
    ① 模板方法:定义了算法的骨架,按某种顺序调用其包含的基本方法。
    ② 基本方法:是整个算法中的一个步骤,包含以下几种类型。

    抽象方法: 在抽象类中申明,由具体子类实现。
    具体方法: 在抽象类中已经实现,在具体子类中可以继承或重写它。
    钩子方法: 在抽象类中已经实现,包括用于判断的逻辑方法和需要子类重写的空方法两种。

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

模板方法模式的结构图如图 1 所示。
图1 模板方法模式的结构图

2. 模式的实现

模板方法模式的代码如下:

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(); //抽象方法1
    public abstract void abstractMethod2(); //抽象方法2
}
//具体子类
class ConcreteClass extends AbstractClass
{
    public void abstractMethod1()
    {
        System.out.println("抽象方法1的实现被调用...");
    }   
    public void abstractMethod2()
    {
        System.out.println("抽象方法2的实现被调用...");
    }
}

程序的运行结果如下:

抽象类中的具体方法被调用...
抽象方法1的实现被调用...
抽象方法2的实现被调用...
模式的应用实例

【例】用模板方法模式实现出国留学手续设计程序。

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

在本实例中,我们先定义一个出国留学的抽象类 StudyAbroad,里面包含了一个模板方法 TemplateMethod(),该方法中包含了办理出国留学手续流程中的各个基本方法,其中有些方法的处理由于各国都一样,所以在抽象类中就可以实现,但有些方法的处理各国是不同的,必须在其具体子类(如美国留学类 StudyInAmerica)中实现。如果再增加一个国家,只要增加一个子类就可以了,图 2 所示是其结构图。
图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
{
    @Override
    public 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)文凭是否受到我国认可?");
    }
    @Override
    public void ApplyForEnrol()
    {
        System.out.println("二.入学申请:");
        System.out.println("  1)填写报名表;");
        System.out.println("  2)将报名表、个人学历证明、最近的学习成绩单、推荐信、个人简历、托福或雅思语言考试成绩单等资料寄往所申请的学校;");
        System.out.println("  3)为了给签证办理留有充裕的时间,建议越早申请越好,一般提前1年就比较从容。");       
    }
    @Override
    public void Arriving()
    {
        System.out.println("六.抵达目标学校:");
        System.out.println("  1)安排住宿;");
        System.out.println("  2)了解校园及周边环境。");
    }
}

程序的运行结果如下:

一.索取学校以下资料:
  1)对留学意向国家的政治、经济、文化背景和教育体制、学术水平进行较为全面的了解;
  2)全面了解和掌握国外学校的情况,包括历史、学费、学制、专业、师资配备、教学设施、学术地位、学生人数等;
  3)了解该学校的住宿、交通、医疗保险情况如何;
  4)该学校在中国是否有授权代理招生的留学中介公司?
  5)掌握留学签证情况;
  6)该国政府是否允许留学生合法打工?
  8)毕业之后可否移民?
  9)文凭是否受到我国认可?
二.入学申请:
  1)填写报名表;
  2)将报名表、个人学历证明、最近的学习成绩单、推荐信、个人简历、托福或雅思语言考试成绩单等资料寄往所申请的学校;
  3)为了给签证办理留有充裕的时间,建议越早申请越好,一般提前1年就比较从容。
三.办理因私出国护照、出境卡和公证:
  1)持录取通知书、本人户口簿或身份证向户口所在地公安机关申请办理因私出国护照和出境卡。
  2)办理出生公证书,学历、学位和成绩公证,经历证书,亲属关系公证,经济担保公证。
四.申请签证:
  1)准备申请国外境签证所需的各种资料,包括个人学历、成绩单、工作经历的证明;个人及家庭收入、资金和财产证明;家庭成员的关系证明等;
  2)向拟留学国家驻华使(领)馆申请入境签证。申请时需按要求填写有关表格,递交必需的证明材料,缴纳签证。有的国家(比如美国、英国、加拿大等)在申请签证时会要求申请人前往使(领)馆进行面试。
五.体检、订机票、准备行装:
  1)进行身体检查、免疫检查和接种传染病疫苗;
  2)确定机票时间、航班和转机地点。
六.抵达目标学校:
  1)安排住宿;
  2)了解校园及周边环境。
模式的应用场景
  • 算法的整体步骤很固定,但其中个别部分易变时,这时候可以使用模板方法模式,将容易变的部分抽象出来,供子类实现。
  • 当多个子类存在公共的行为时,可以将其提取出来并集中到一个公共父类中以避免代码重复。首先,要识别现有代码中的不同之处,并且将不同之处分离为新的操作。最后,用一个调用这些新的操作的模板方法来替换这些不同的代码。
  • 当需要控制子类的扩展时,模板方法只在特定点调用钩子操作,这样就只允许在这些点进行扩展。
模式的扩展

在模板方法模式中,基本方法包含:抽象方法、具体方法和钩子方法,正确使用“钩子方法”可以使得子类控制父类的行为。如下面例子中,可以通过在具体子类中重写钩子方法 HookMethod1() 和 HookMethod2() 来改变抽象父类中的运行结果,其结构图如图 3 所示。
图3 含钩子方法的模板方法模式的结构图
程序代码如下:

package templateMethod;
public class HookTemplateMethod
{
    public static void main(String[] args)
    {
        HookAbstractClass tm=new HookConcreteClass();
        tm.TemplateMethod();
    }
}
//含钩子方法的抽象类
abstract class HookAbstractClass
{
    public void TemplateMethod() //模板方法
    {
        abstractMethod1();
        HookMethod1();
        if(HookMethod2())
        {
            SpecificMethod();   
        }
         abstractMethod2();
    }  
    public void SpecificMethod() //具体方法
    {
        System.out.println("抽象类中的具体方法被调用...");
    }
    public void HookMethod1(){}  //钩子方法1
    public boolean HookMethod2() //钩子方法2
    {
        return true;
    }
    public abstract void abstractMethod1(); //抽象方法1
    public abstract void abstractMethod2(); //抽象方法2
}
//含钩子方法的具体子类
class HookConcreteClass extends HookAbstractClass
{
    public void abstractMethod1()
    {
        System.out.println("抽象方法1的实现被调用...");
    }   
    public void abstractMethod2()
    {
        System.out.println("抽象方法2的实现被调用...");
    }   
    public void HookMethod1()
    {
        System.out.println("钩子方法1被重写...");
    }
    public boolean HookMethod2()
    {
        return false;
    }
}

程序的运行结果如下:

抽象方法1的实现被调用...
钩子方法1被重写...
抽象方法2的实现被调用...

如果钩子方法 HookMethod1() 和钩子方法 HookMethod2() 的代码改变,则程序的运行结果也会改变。

硬件电路(22)-TTL和232切换电路 工作中会遇到TTL和232电平的通信的状态,为了实现一种便捷的切换方式,参考了一些文章,提供一种电路方便大家使用。 阅读详情

相关推荐

task5:在本地搭建大模型(ollama 和 LM studio 对比),接入 openclaw

关于大模型,大家千万不要想着在本地部署,根本不可行,没有那个财力。另外大模型迭代快,不可能每周都在下载大模型。再次,还是国外的模型好用,国内的模型真的在 deepresearch 上就有很大问题,你们懂的。所以本篇文章,还是聚焦在探索层面+实操,并不会实战。

这里是 AI 食用指南,持续分享有用的AI 实操和应用! 1968

【设计模式】Java 设计模式之模板方法模式(Template Method)

模板方法模式是一种灵活且强大的设计模式,通过抽象类和具体子类的组合,实现算法结构的灵活扩展。它遵循开闭原则,对扩展开放,对修改封闭,提高了代码的可维护性和可扩展性。该模式与面向对象设计的其他原则和实践紧密相关,如单一职责原则和接口隔离原则。然而,在使用时也需注意避免过度使用导致类数量增加。模板方法模式广泛应用于各种实际项目中,如在线支付系统、文件处理、Web开发等,可帮助构建通用的流程并允许自定义逻辑。通过深入理解其原理和注意事项,并结合实际应用,我们可以更好地利用模板方法模式提升软件系统的性能和可维护性。

新手村长的专栏 3641

从爱好者到工程师:如何低成本体验RFSoC ZU47DR?性能实测与避坑指南

本文详细介绍了如何低成本体验赛灵思RFSoC ZU47DR芯片,包括二手开发板选购、租赁服务、精简开发环境搭建等实用方案。通过性能实测与避坑指南,帮助爱好者和工程师在有限预算下充分利用这款集成了ARM处理器和FPGA的高性能芯片,降低开发门槛。

weixin_42525005的博客 220

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

本文介绍了模板方法模式相关的知识。

代码星辰的博客 1565

CATIA V5新手必看:从零开始的界面导航与基础操作指南(附常见问题解决)

本文为CATIA V5新手提供全面的界面导航与基础操作指南,涵盖核心工作区解析、文件管理规范、视图操作秘籍及常见问题解决方案。通过详细的步骤说明和实用技巧,帮助用户快速掌握这一工业设计标杆软件,特别适合从SolidWorks、AutoCAD等软件过渡的用户。

b9c0d的博客 529

gnss变形监测基础(四)

监测站的数据采样率指的是监测站在单位时间内收集数据的频率,通常以赫兹(Hz)为单位。在GNSS变形监测中,数据采样率决定了监测系统能够捕捉到的变形动态变化的详细程度和时间分辨率。例如,一个采样率为1Hz的GNSS监测站意味着它每秒钟收集一次位置数据;而一个采样率为10Hz的监测站则每秒钟收集10次位置数据。较高的采样率能够提供更细致的时间序列数据,有助于分析快速变化的动态过程,如地震活动或建筑物的振动响应。然而,较高的采样率也意味着数据量更大,可能需要更多的存储空间和更强大的数据处理能力。

我的博客 1292

Java设计模式之模板模式

模板模式的介绍 定义一个操作中算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤。 通俗易懂的话来说:父类中定义好一个操作的框架(方法),在框架中一个步骤就是一个抽象方法,具体的步骤交给子类来实现,而每个子类的实现的细节都不一致。已达到不同的子类完成一个相似的操作而细节都不一致。 模板模式的案例 先上案例的类图 父类定义了制作炸鸡的方法,而制作一只炸鸡需要养殖->屠宰->油炸,这三个步骤分别定义成一个方法等待子类来重写,

李哈zzz的博客 6297

笔记本电脑更换主板后出现2203:System configuration is invalid,以及2201、2202系统错误的解决

主板更换后刷新S/N

晓夏IT笔记 3518

23种设计模式之模板方法模式

文章目录模板方法模式模板方法模式的优缺点使用场景 模板方法模式 模板方法模式法(Template Method)定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。 模板方法模式包含以下主要角色: 抽象类(Abstract Class):负责给出一个算法的轮廓和骨架。它由一个模板方法和若干个基本方法构成。 模板方法:定义了算法的骨架,按某种顺序调用其包含的基本方法。 基本方法:是实现算法各个步骤的方法。基本方法又可以分为三种: 抽象

zt的博客 1190

XDMA Scatter-Gather(SG)模式

XDMA Scatter-Gather(SG)模式 是 Xilinx FPGA 中用于高效处理 ​非连续内存数据 的 DMA 传输机制,通过 ​描述符链表(Descriptor List)​ 管理多块分散数据,显著减少 CPU 开销并提升吞吐量。

浩瀚之水的专栏 2134

STM32Cube高效开发教程<高级篇><FreeRTOS>(一)-----FreeRTOS基础

一、 FreeRTOS概述声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。本专栏博客参考《STM32Cube高效开发教程(高级篇)》,有意向的读者可以购买正版书籍辅助学习,本书籍由王维波老师、鄢志丹老师、王钊老师倾力打造,书籍内容干货满满。写在前面:今天就算正式开始高级篇的博客编写了,我本人也是第一次学习FreeRTOS,所以整体的进度会比较慢,博客更新可能不太会及时,希望大家原谅。一、 FreeRTOS概述。

我的博客 1848

JAVA设计模式之模板模式

设计模式 设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、...

bernardGao94的博客 1754

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Java设计模式 Design Pattern:模板方法 Template Method

<br /><br />意图Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. 在一个操作中定义一个算法的骨架,在子类中改变某些步骤Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure. 模板方法使得子类可以重新

OYJJ的专栏 1643

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

C# 面试问题高级:039 - 什么是模板方法设计模式Template Method design pattern?

模板方法模式(Template Method Pattern)是一种行为型设计模式,它定义了一个算法的步骤骨架,将这些步骤的具体实现延迟到子类中。这种模式使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

caifox的博客 1018

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

设计模式详解(十一):模板方法——Template Method

Template Method 模式是一种将算法的步骤结构固定下来的设计模式,通过一个模板方法(Template Method)定义算法的执行顺序,同时将部分步骤的实现延迟到子类中去完成。通俗来说,就是定义一个通用的流程框架,并允许子类根据需要填充其中的具体步骤。

Android Engineer. 1425

设计模式:C++ 模板方法模式 (Template Method in C++)

设计模式:C++ 模板方法模式 (Template Method in C++)

程永强 1270

Template Method Design Pattern - 模板方法设计模式

UML图示:用途:Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Let subclasses redefine certain steps of an algorithm without changing the algorithms structure

学 习 者 说 749

3 设计模式_模板方法(Template Method)

GOF-23 模式分类

asladfa的博客 241

设计模式——Template Method模板方法

文章目录1.动机2.定义3.代码4.总结 1.动机 在软件构建过程中,对于某一项任务,它常常有稳定的整体操作结构, 但各个子步骤却有很多改变的需求,或者由于固有的原因(比如框架与应用之间的关系) 而无法和任务的整体结构同时实现。 如何在确定稳定操作结构的前提下,来灵活应对各个子步骤的变化或者晚期实现需求? 2.定义 定义一个操作中的算法的骨架 (稳定),而将一些步骤延迟(变化)到子类中。 Template Method使得子类可以不改变(复用)一个算法的结构 即可重定义(override 重写)该算法的

zxr916的博客 115

【design pattern】行为型模式之—模板方法设计模式(Template method)

1. 简介                                  Template method :模板方法 设计模式 定义一个操作中的 算法骨架,将一些步骤放到子类中去实现。 结合其名称通俗的解释, 提供一个 模板方法 ,这个模板方法可以被多次重用 ,但是 其中某些部分在重用的过程中需要改变 ,那就利用抽象的思想,把需要改变的部分抽象出来,由其不同的子类 提

lihuapiao的专栏 709

设计模式-模板方法模式-Template Method Pattern

首先,我们定义一个模板基类,其中包含模板方法和一些虚函数,这些虚函数将在派生类中被重写。// 模板基类public:// 模板方法step1();step2();step3();protected:// 抽象步骤,子类必须实现创建一个抽象基类,它定义了模板方法和算法的框架。模板方法:一个或多个步骤组成的算法,这些步骤通过调用抽象操作来执行。抽象操作:定义为纯虚函数(pure virtual functions),子类必须实现这些函数。

wesigj的博客 1292

设计模式:模板方法 Template Method

模板方法模式是一种行为设计模式,通过在超类中定义算法框架,允许子类重写特定步骤而不改变结构。本文以数据挖掘程序为例,说明如何为不同格式文件(PDF/DOC/CSV)设计统一处理流程。核心思想是将算法分解为抽象步骤(必须由子类实现)、可选步骤(有默认实现)和钩子步骤(可扩展点)。示例代码展示了一个PDF文件处理器的实现,其中基类DataMiner定义模板方法mine(),子类PDFDataMiner实现具体操作步骤。该模式有效消除重复代码,并通过多态机制替代条件判断,提高了代码复用性和可扩展性。

weixin_51878399的博客 698

模板方法设计模式(Template Method)

1.概述 组成模板的方法被定义在父类中,由于这些方法是抽象方法,在父类中无法查看这些方法的具体实现,唯一可以知道的就是父类如何调用这些方法的。这种在父类中定义处理流程的框架,在子类中实现具体处理的模式就是模板方法(Template Method)设计模式。 举一个例子:学生都需要去上课,其上课的具体流程是上课、听课、下课,但是不同类学生听课(上课、下课)的具体内容不同,不过它们的流程相同,即...

学习笔记 553

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

Java设计模式、模板方法模式、Template Method Pattern

scorpio的博客 3万+
上一篇: Java基本数据类型详解
下一篇: Java--String常用API
吴声子夜歌
博客等级 码龄9年 2687粉丝 2266原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值