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

目录
相关文章
|
14天前
|
设计模式 Java 程序员
[Java]23种设计模式
本文介绍了设计模式的概念及其七大原则,强调了设计模式在提高代码重用性、可读性、可扩展性和可靠性方面的作用。文章还简要概述了23种设计模式,并提供了进一步学习的资源链接。
31 0
[Java]23种设计模式
|
30天前
|
设计模式 监控 算法
Java设计模式梳理:行为型模式(策略,观察者等)
本文详细介绍了Java设计模式中的行为型模式,包括策略模式、观察者模式、责任链模式、模板方法模式和状态模式。通过具体示例代码,深入浅出地讲解了每种模式的应用场景与实现方式。例如,策略模式通过定义一系列算法让客户端在运行时选择所需算法;观察者模式则让多个观察者对象同时监听某一个主题对象,实现松耦合的消息传递机制。此外,还探讨了这些模式与实际开发中的联系,帮助读者更好地理解和应用设计模式,提升代码质量。
Java设计模式梳理:行为型模式(策略,观察者等)
|
2月前
|
存储 设计模式 安全
Java设计模式-备忘录模式(23)
Java设计模式-备忘录模式(23)
|
2月前
|
设计模式 存储 算法
Java设计模式-命令模式(16)
Java设计模式-命令模式(16)
|
2月前
|
设计模式 存储 缓存
Java设计模式 - 解释器模式(24)
Java设计模式 - 解释器模式(24)
|
2月前
|
设计模式 安全 Java
Java设计模式-迭代器模式(21)
Java设计模式-迭代器模式(21)
|
2月前
|
设计模式 缓存 监控
Java设计模式-责任链模式(17)
Java设计模式-责任链模式(17)
|
2月前
|
设计模式 运维 算法
Java设计模式-策略模式(15)
Java设计模式-策略模式(15)
|
2月前
|
设计模式 算法 Java
Java设计模式-模板方法模式(14)
Java设计模式-模板方法模式(14)
|
2月前
|
设计模式 存储 安全
Java设计模式-组合模式(13)
Java设计模式-组合模式(13)