当前位置: 首页 > news >正文

java设计模式-建造者(Builder)设计模式

介绍

Java的建造者(Builder)设计模式可以将产品的内部表现和产品的构建过程分离开来,这样使用同一个构建过程来构建不同内部表现的产品。

建造者设计模式涉及如下角色:

  • 产品(Product)角色:被建造的复杂对象。对象包括了多个部分,这些部分有可能有顺序关系,需要按照一定的顺序来创建。
  • 抽象构建者(Builder)角色:定义了构建产品各部分的接口,一般产品中的每个部分对应一个接口。另外,还提供返回产品的接口。抽象构建者跟具体的业务逻辑无关。
  • 具体构建者(Concrete Builder)角色:实现抽象构建者的接口,跟具体的业务逻辑相关,完成具体产品各部分的构建。如果要构建的不同产品包含的部件数量不完全相同,那也可以在抽象构建者角色中定义一套全的接口,但在具体构建者角色中对产品没有的那部分部件的构建接口实现为空。
  • 导演者(Diretor)角色:直接和客户端打交道,调用具体构建者角色创建具体的产品。

代码示例

定义一个产品:

package com.thb;public class Packet {private String header;private String content;private int contentLength;public void setHeader(String header) {this.header = header;}public void setContent(String content) {this.content = content;}public void setContentLength() {this.contentLength = content.length();}public void showSummary() {System.out.println("header: " + this.header);System.out.println("content: " + this.content);System.out.println("contentLength: " + this.contentLength);}
}

定义抽象构建者:

package com.thb;public abstract class Builder {protected Packet packet;public Builder() {this.packet = new Packet();}public abstract void builidHeader();public abstract void builidContent();public void builidContentLength() {this.packet.setContentLength();}public Packet getResult() {return this.packet;}
}

定义一个具体构建者:

package com.thb;public class HeartBeatPacketBuilder extends Builder {@Overridepublic void builidHeader() {this.packet.setHeader("heartbeat header");}@Overridepublic void builidContent() {this.packet.setContent("heartbeat content");}}

定义另外一个具体构建者:

package com.thb;public class RegisterPacketBuilder extends Builder {@Overridepublic void builidHeader() {this.packet.setHeader("register header");}@Overridepublic void builidContent() {this.packet.setContent("register content");}}

定义导演者:

package com.thb;public class Director {private Builder builder;public Packet construct(Builder builder) {this.builder = builder;builder.builidHeader();builder.builidContent();builder.builidContentLength();return this.builder.getResult();}
}

定义主类,模拟客户端调用:

package com.thb;public class Test1 {public static void main(String[] args) {Director director = new Director();Builder heartBeatPacketBuilder = new HeartBeatPacketBuilder();Packet heartBeatPacket = director.construct(heartBeatPacketBuilder);heartBeatPacket.showSummary();System.out.println("------------------------------------");Builder registerPacketBuilder = new RegisterPacketBuilder();Packet registerPacket = director.construct(registerPacketBuilder);registerPacket.showSummary();}
}

运行输出:
在这里插入图片描述

http://www.lryc.cn/news/102717.html

相关文章:

  • iOS开发-实现获取下载主题配置动态切换主题
  • react经验4:动态组件
  • Java maven的下载解压配置(保姆级教学)
  • Java课题笔记~数据库连接池
  • 设计模式-单例模式
  • golang mysql
  • uniapp使用echarts
  • Python命令模式介绍、使用
  • #typescript 使用file-saver模块#
  • 移动端适配布局rem和vw
  • 【Java基础教程】(四十八)集合体系篇 · 上:全面解析 Collection、List、Set常用子接口及集合元素迭代遍历方式~【文末送书】
  • 什么是 DNS ANAME 解析?
  • Neo4j 集群和负载均衡
  • go web框架 gin-gonic源码解读01————Engine
  • windows版docker部署springcloud项目
  • 探索工程机械远程控制新纪元:Intewell-Hyper II震撼发布!
  • DM8 DSC集群实时主备搭建
  • 配置IPv4 over IPv6隧道示例
  • 在中国区部署日志通2.0
  • centos下安装jdk
  • 【HDFS】LocatedBlocks、LocatedBlock、LocatedStripedBlock、ExtendedBlock类分析
  • Oracle 19c 报ORA-704 ORA-01555故障处理---惜分飞
  • D356周赛复盘:滑动窗口+三元问题思路
  • ETHERNET/IP 转ETHERCAT连接倍福和欧姆龙PLC的配置方法
  • Git分布式版本控制工具和GitHub(一)--简介
  • 【Terraform学习】Terraform-AWS部署快速入门(快速入门)
  • 力扣75——深度优先搜索
  • 【C++初阶】C++基础(上)——C++关键字、命名空间、C++输入输出、缺省参数、函数重载
  • 代码随想录训练营Day55动态规划part15|392.判断子序列|115.不同的子序列
  • Linux下安装RabbitMQ教程