iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java设计模式之模板方法模式
  • 805
分享到

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

Java设计模式模板方法模式 2022-11-13 18:11:10 805人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

在我们实际开发中,如果一个方法极其复杂时,如果我们将所有的逻辑写在一个方法中,那维护起来就很困难,要替换某些步骤时都要重新写,这样代码的扩展性就很差,当遇到这种情况就要考虑今天的主角

在我们实际开发中,如果一个方法极其复杂时,如果我们将所有的逻辑写在一个方法中,那维护起来就很困难,要替换某些步骤时都要重新写,这样代码的扩展性就很差,当遇到这种情况就要考虑今天的主角——模板方法模式。

一、概念理解

模板方法模式的概念很简单,在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

既然概念叫“骨架”,那想当然的就是定义一个抽象类,这是模板方法模式的第一个角色——抽象模板角色,要有延迟子类实现骨架方法,这是模板方法的第二个角色——具体模板角色。

抽象模板角色:定义了一个或多个抽象操作,以便让子类实现。这些抽象操作叫做基本操作,它们是一个顶级逻辑的组成步骤,定义并实现了一个模板方法。

具体模板角色:实现父类所定义的一个或多个抽象方法,它们是一个顶级逻辑的组成步骤。每一个抽象模板角色都可以有任意多个具体模板角色与之对应。

二、案例实现

在我们的业务开发中往往都需要很多对象、很多方法,对象间也大都存在依赖关系,如果我们手动创建、管理对象就是一件极其困难的事。

如果我们使用工厂模式用于创建对象,使用一个容器用于管理对象,那么再使用起来就变得极其简单了。

在“这个过程”中创建对象就是一个很复杂的算法,而且创建对象的方式往往也不是单一的,我们要考虑能替换算法,这时候就可以使用模板方法模式。

假设创建对象有两种方式,一种是基于注解,一种是基于xml,我们就将该方法定义为一个模板方法,基于注解和基于xml让子类去实现。

我们用refresh()方法代表这个复杂的过程,在这个过程中应该包括:

①开始工作前的预处理;

②创建管理对象的容器(模板方法,基于注解和基于XML交给子类实现);

③模板方法(交给子类,方便扩展);

④其他方法(容器刷新后、国际化、应用监听、发布事件,等等等一堆事)。

我们基于模板方法模式我们实现简单的demo。

抽象模板角色:

我们在抽象模板角色中实现部分逻辑,而创建对象的容器obtainFreshBeanFactory()方法交给子类实现,onRefresh()空方法交给子类实现便于扩展。


public abstract class AbstractApplicationContext {

    
    public void refresh(){

        this.prepareRefresh();

        this.obtainFreshBeanFactory();

        this.onRefresh();
    }

    protected void prepareRefresh(){
        System.out.println("我用于开始工作前的预处理...");
    }

    protected void obtainFreshBeanFactory(){
        System.out.println("我用于创建默认管理对象的容器...");
    }

    
    protected void onRefresh() {
    }


    protected void otherMethod(){
        System.out.println("容器刷新后、国际化、应用监听、发布事件,等等等,一堆事");
    }
}

具体模板角色-基于注解创建管理对象的容器


public class ApplicationContextAnnotation extends AbstractApplicationContext {
    @Override
    protected void obtainFreshBeanFactory() {
        System.out.println("这是基于注解的创建对象容器...");
    }
}

具体模板角色-基于xml创建管理对象的容器


public class ApplicationContextXml extends AbstractApplicationContext {
    @Override
    protected void obtainFreshBeanFactory() {
        System.out.println("这是xml的创建对象容器...");
    }
}

客户端-模拟容器启动过程:


public class Client {
    public static void main(String[] args) {

		//基于xml方式
        ApplicationContextXml applicationContextXml = new ApplicationContextXml();
        applicationContextXml.refresh();

		//基于注解方式
        ApplicationContextAnnotation annotation=new ApplicationContextAnnotation();
        annotation.refresh();

    }
}

我用于开始工作前的预处理...
这是xml的创建对象容器...
容器刷新后、国际化、应用监听、发布事件,等等等,一堆事
我用于开始工作前的预处理...
这是基于注解的创建对象容器...
容器刷新后、国际化、应用监听、发布事件,等等等,一堆事

Spring源码稍微有点了解的同学大概已经知道,我们案例实现的正是简易版的spring的Refresh()方法,Refresh()方法是Spring最核心的方法,Spring良好的扩展性正是离不开模板方法模式的运用。下图为Spring核心Refresh()方法的执行大流程注释。

在我们案例中的onRefresh()的空方法,实际中SpringBoot就是实现了这个空方法,onRefresh()方法调用了Tomcatjar包启动,这也是Springboot不需要手动注入Tomcat的原因。

相信通过这个案例的理解,大部分同学不仅能很好的理解模板方法模式,想必对Spring的启动过程也有了一个大概的了解。

三、总结

模板方法应用场景太普遍了,在实际开发中有多个子类共有的方法,并且逻辑相同,可以考虑使用模板方法模式。当面对重要、复杂的算法,也可以把核心算法设计为模板方法模式,相关细节则由各个子类实现。

模板方法优点突出:封装不变部分,扩展可变部分;提取公共代码,便于维护;行为由父类控制,子类实现。

模板方法的缺点很明显,当方法实现过多的时候,每一个不同的实现都需要一个子类来实现,这必然导致类的个数增加,使得系统变得更加庞大。

到此这篇关于Java设计模式之模板方法模式的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: Java设计模式之模板方法模式

本文链接: https://www.lsjlt.com/news/169735.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java设计模式之模板方法模式
    在我们实际开发中,如果一个方法极其复杂时,如果我们将所有的逻辑写在一个方法中,那维护起来就很困难,要替换某些步骤时都要重新写,这样代码的扩展性就很差,当遇到这种情况就要考虑今天的主角...
    99+
    2022-11-13
    Java 设计模式 模板方法模式
  • Java设计模式之浅谈模板方法模式
    一. 什么是模板方法设计模式 从字面意义上理解, 模板方法就是定义出来一套方法, 作为模板, 也就是基础。 在这个基础上, 我们可以进行加工,实现个性化的实现。比如:一日餐三. 早餐...
    99+
    2022-11-12
  • Java设计模式之模板方法模式详解
    目录模板方法模式模板方法模式的优缺点使用场景总结模板方法模式 模板方法模式法(Template Method)定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不...
    99+
    2022-11-13
  • Java设计模式之java模板方法模式详解
    目录模板方法模式介绍角色代码演示模板方法模式总结优点缺点适用场景源码分析模板方法模式的典型应用Servlet 中的模板方法模式Hello World!Spring中的IOC容器启动—...
    99+
    2022-11-12
  • Java设计模式-模板方法模式
    定义Define the skeleton of an algorithm in an operation,deferring some steps to subclasses.Template Method lets subcl...
    99+
    2023-06-05
  • Java设计模式之模板方法模式TemplateMethodPattern详解
    目录概述模板方法模板方法模式好莱坞原则好莱坞原则与依赖倒置原则真实案例模板方法模式的注意事项和细节概述 模板方法 模板方法定义了一个算法的步骤,并允许子类为一个或多个步骤提供实现。那...
    99+
    2022-11-13
    Java模板方法模式 Java Template Method Pattern
  • Java设计模式之模板方法详解
    目录概念核心设计要点优缺点应用场景模板方法和策略模式的区别代码案例概念 模板方法模式是所有模式中最为常见的几个模式之一,是基于继承的代码复用的基本技术,没有关联关系。因此,在模板方法...
    99+
    2022-11-13
  • 深入理解Java设计模式之模板方法模式
    目录一、什么是模板方法模式二、模板方法模式的使用场景三、模板方法模式的优缺点四、模板方法模式的实现五、总结一、什么是模板方法模式 模板方法模式在一个方法中定义一个算法的骨架,而将一些...
    99+
    2022-11-12
  • Java设计模式之模板方法模式实例分析
    本文小编为大家详细介绍“Java设计模式之模板方法模式实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java设计模式之模板方法模式实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。模板方法模式模板方...
    99+
    2023-06-29
  • PHP设计模式之模板方法模式TemplateMethodPattern详解
    目录简介适用场景优点缺点其它代码简介 模板方法模式,是行为型的设计模式。 定义一个操作中的算法的骨架,而将一些步骤延迟到子类当中,使得子类可以不改变一个算法的结构即可重新定义该算法的...
    99+
    2022-12-20
    PHP设计模式之模板方法模式 PHP模板方法模式
  • 分析设计模式之模板方法Java实现
    目录一、什么是模板方法设计模式1.1、模板方法的用途1.2、模板方法的定义二、定义模板方法的步骤2.1、定义模板类2.2、定义具体子类2.3、定义客户端调用2.4 下抽象类和子类之间...
    99+
    2022-11-12
  • Java行为型设计模式之模板方法详解
    目录模板方法模式应用场景主要角色优缺点模板方法模式的基本使用创建抽象模板角色创建具体实现客户端调用模板方法模式 模板方法模式属于行为型设计模式。它是指定义一个操作中的算法的框架,而将...
    99+
    2022-11-13
  • .Net行为型设计模式之模板方法模式(Template Method)
    目录一、动机(Motivate)二、意图(Intent)三、结构图四、模式的组成五、模板方法模式的具体实现六、模板方法模式的实现要点:1、模板方法模式适用情形:2、模板方法模式特点:...
    99+
    2022-11-13
  • 怎么理解Java设计模式的模板方法模式
    这篇文章主要讲解了“怎么理解Java设计模式的模板方法模式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解Java设计模式的模板方法模式”吧!一、什么是模板方法模式模板方法模式在一个方...
    99+
    2023-06-25
  • Java通俗易懂系列设计模式之模板模式
    目录介绍实现总结实际开发中常常会遇到,代码骨架类似甚至相同,只是具体的实现不一样的场景。例如:流程都有开启、编辑、驳回、结束。每个流程都包含这几个步骤,不同的是不同的流程实例它们的内...
    99+
    2022-11-12
  • Java中常用的设计模式之模板模式详解
    目录优点缺点使用场景一、实现方式1、游戏抽象类2、LOL游戏类3、CF游戏类二、测试总结优点 封装不变部分,扩展可变部分。 提取公共代码,便于维护。 行为由父类控制,子类实现。 缺点...
    99+
    2022-11-13
  • Java设计模式之工厂方法模式详解
    目录1.工厂方法是什么2.如何实现3.代码实现4.工厂方法模式的优点5.拓展1.工厂方法是什么 众所周知,工厂是生产产品的,并且产品供消费者使用。消费者不必关心产品的生产过程,只需要...
    99+
    2022-11-13
  • 设计模式二十三:模板方法模式(Template Method Pattern)
    定义了一个算法的框架,将算法的具体步骤延迟到子类中实现。这样可以在不改变算法结构的情况下,允许子类重写算法的特定步骤以满足自己的需求 模版方法使用场景 算法框架固定,但具体步骤可以变化:当你有一个算法的整体结构是固定的,但其中某些步骤的实现...
    99+
    2023-08-30
    设计模式 模板方法模式
  • Java设计模式之单例模式
    目录什么是设计模式?单例模式是什么?单例模式设计的原则是什么?Java实现单例模式的5种方式?懒汉饿汉静态内部类双重校验锁DCL(Double Check Lock)枚举(num)总...
    99+
    2022-11-12
  • Java设计模式之桥接模式
    本文通过老王和小王买车,引出设计模式中的结构型设计之桥接模式,接着说明设计型模式的概念和代码实现,为了加深理解,会说明适配器设计模式在JDBC中的应用,最后谈谈桥接模式和适配器模式的...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作