Java--设计模式-23-状态模式

简介: 模板模式(Template Pattern)就是在一个方法中定义一个算法的骨架,而将一些步骤的实现延迟到子类中,使得子类可以在不改变一个算法的结构前提下即可重定义该算法的某些特定步骤。

模板模式(Template Pattern)就是在一个方法中定义一个算法的骨架,而将一些步骤的实现延迟到子类中,使得子类可以在不改变一个算法的结构前提下即可重定义该算法的某些特定步骤。

       这个模式好懂哈,就比如一条生产汽车的流水线,其中各个组装操作点都放到子类,整个流水线就是算法(生产汽车)的骨架,在每一个操作点(子类)中都可以在不影响整个算法构架的前提下重新定义该算法(比如安装车门的时候,安装白色车门、拉式车门、滑动式车门都可以)。

       最近在写查询域的项目,支持客户查询和车辆查询,他们的操作流程都是分为入参校验、组装中台入参、执行查询、解析结果组装响应参数等步骤。此时就可以使用模板模式来实现。

一、代码实现查询域:

1.建立一个公共的DTO,这个主要用于数据流转

packagecom.xing.design.template;
/***  查询DTO* @author xing* @createTime*/publicclassQueryDTO {
privateStringcode;
privateStringmessage;
publicvoidsetCode(Stringcode) {
this.code=code;
  }
publicStringgetCode() {
returnthis.code;
  }
publicvoidsetMessage(Stringmessage) {
this.message=message;
  }
publicStringgetMessage() {
returnthis.message;
  }
}


2.建立模板类

packagecom.xing.design.template;
publicabstractclassQuery {
/*** 校验请求参数*/abstractQueryDTOcheck(QueryDTOqueryDTO);
/*** 组装请求参数*/abstractQueryDTOmakeReq(QueryDTOqueryDTO);
/*** 调用核心接口执行查询*/abstractQueryDTOdoSome(QueryDTOqueryDTO);
/*** 组装响应参数*/abstractObjectmakeRes(QueryDTOqueryDTO);  
/*** 查询操作流程模板*/publicfinalObjectquery(QueryDTOqueryDTO) {
check(queryDTO);
makeReq(queryDTO);
doSome(queryDTO);
returnmakeRes(queryDTO);
  }
}

3.车辆查询

packagecom.xing.design.template;
/*** 车辆查询* @author xing*/publicclassCarQueryextendsQuery{
@OverrideQueryDTOcheck(QueryDTOqueryDTO) {
System.out.println("车辆查询入参校验...");
returnqueryDTO;
  }
@OverrideQueryDTOmakeReq(QueryDTOqueryDTO) {
System.out.println("车辆查询中台入参组装");
returnqueryDTO;
  }
@OverrideQueryDTOdoSome(QueryDTOqueryDTO) {
System.out.println("车辆查询去中台查询,将查询结果转换到");
returnqueryDTO;
  }
@OverrideObjectmakeRes(QueryDTOqueryDTO) {
System.out.println("对queryDTO进行解析,然后组装车辆的响应DTO");
returnqueryDTO;
  }
}


4.客户查询

packagecom.xing.design.template;
/*** 客户查询* @author xing*/publicclassCustomerQueryextendsQuery{
@OverrideQueryDTOcheck(QueryDTOqueryDTO) {
System.out.println("客户查询入参校验...");
returnqueryDTO;
  }
@OverrideQueryDTOmakeReq(QueryDTOqueryDTO) {
System.out.println("客户查询中台入参组装");
returnqueryDTO;
  }
@OverrideQueryDTOdoSome(QueryDTOqueryDTO) {
System.out.println("客户查询去中台查询,将查询结果转换到");
returnqueryDTO;
  }
@OverrideObjectmakeRes(QueryDTOqueryDTO) {
System.out.println("对queryDTO进行解析,然后组装客户的响应DTO");
returnqueryDTO;
  }
}


5.编写main方法调用查询

packagecom.xing.design.template;
/*** 模板模式* @author xing*/publicclassTemplateDemo {
publicstaticvoidmain(String[] args) {
System.out.println("---------------------车辆查询流程开始---------------------");
Querycar=newCarQuery();
car.query(newQueryDTO());
System.out.println("---------------------车辆查询流程结束---------------------");
System.out.println("---------------------客户查询流程开始---------------------");
Querycustomer=newCustomerQuery();
customer.query(newQueryDTO());
System.out.println("---------------------客户查询流程结束---------------------");
  }
}

6.测试结果:

image.png

       为防止恶意操作,一般模板方法都加上 final 关键词。

总结:

       模板模式就是将固定的流程(不变的部分)封装到一个模板类中,然后将流程中具体的操作节点实现放到子类去各实现各的(可变的部分)。父类控制行为,子类实现行为。


END

目录
相关文章
|
4月前
|
设计模式 网络协议 Java
【设计模式】【行为型模式】状态模式(State)
一、入门 什么是状态模式? 状态模式(State Pattern)是一种行为设计模式,允许对象在其内部状态改变时改变其行为,使其看起来像是改变了类。状态模式的核心思想是将对象的状态封装成独立的类,并将
173 16
|
4月前
|
设计模式 缓存 安全
【高薪程序员必看】万字长文拆解Java并发编程!(8):设计模式-享元模式设计指南
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发编程中的经典对象复用设计模式-享元模式,废话不多说让我们直接开始。
90 0
|
6月前
|
设计模式 Java 数据安全/隐私保护
Java 设计模式:装饰者模式(Decorator Pattern)
装饰者模式属于结构型设计模式,允许通过动态包装对象的方式为对象添加新功能,提供比继承更灵活的扩展方式。该模式通过组合替代继承,遵循开闭原则(对扩展开放,对修改关闭)。
|
7月前
|
设计模式 Java Go
【再谈设计模式】状态模式~对象行为的状态驱动者
状态模式属于行为型设计模式。它将对象的行为封装在不同的状态类中,使得对象在不同的状态下表现出不同的行为。上下文(Context):这是一个包含状态对象的类,它定义了客户感兴趣的接口,并维护一个具体状态对象的引用。上下文将操作委托给当前的状态对象来处理。抽象状态(State):这是一个抽象类或者接口,它定义了一个特定状态下的行为接口。所有具体的状态类都实现这个接口。具体状态(Concrete State):这些是实现抽象状态接口的类,每个具体状态类实现了与该状态相关的行为。
146 18
|
10月前
|
设计模式 消息中间件 搜索推荐
Java 设计模式——观察者模式:从优衣库不使用新疆棉事件看系统的动态响应
【11月更文挑战第17天】观察者模式是一种行为设计模式,定义了一对多的依赖关系,使多个观察者对象能直接监听并响应某一主题对象的状态变化。本文介绍了观察者模式的基本概念、商业系统中的应用实例,如优衣库事件中各相关方的动态响应,以及模式的优势和实际系统设计中的应用建议,包括事件驱动架构和消息队列的使用。
152 6
|
10月前
|
设计模式 Java 数据库连接
Java编程中的设计模式:单例模式的深度剖析
【10月更文挑战第41天】本文深入探讨了Java中广泛使用的单例设计模式,旨在通过简明扼要的语言和实际示例,帮助读者理解其核心原理和应用。文章将介绍单例模式的重要性、实现方式以及在实际应用中如何优雅地处理多线程问题。
130 4
|
11月前
|
设计模式 监控 算法
Java设计模式梳理:行为型模式(策略,观察者等)
本文详细介绍了Java设计模式中的行为型模式,包括策略模式、观察者模式、责任链模式、模板方法模式和状态模式。通过具体示例代码,深入浅出地讲解了每种模式的应用场景与实现方式。例如,策略模式通过定义一系列算法让客户端在运行时选择所需算法;观察者模式则让多个观察者对象同时监听某一个主题对象,实现松耦合的消息传递机制。此外,还探讨了这些模式与实际开发中的联系,帮助读者更好地理解和应用设计模式,提升代码质量。
Java设计模式梳理:行为型模式(策略,观察者等)
|
10月前
|
设计模式 JavaScript Java
Java设计模式:建造者模式详解
建造者模式是一种创建型设计模式,通过将复杂对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。本文详细介绍了建造者模式的原理、背景、应用场景及实际Demo,帮助读者更好地理解和应用这一模式。
392 0
|
12月前
|
存储 设计模式 安全
Java设计模式-备忘录模式(23)
Java设计模式-备忘录模式(23)
|
12月前
|
设计模式 存储 缓存
Java设计模式 - 解释器模式(24)
Java设计模式 - 解释器模式(24)
101 1