设计模式系列之建造者模式(Build Pattern)构建实体类

模式定义

建造者模式属于23种设计模式中的创建型模式,可以理解为创建对象的一种很好的方法。

所谓建造者模式就是**将组件和组件的组件过程分开,然后一步一步建造一个复杂的对象。**所以建造者模式又叫生成器模式。
建造者模式类图

模式结构

建造者模式包含如下角色
Builder:抽象建造者
ConcreteBuilder:具体建造者
Director:指挥者
Product:产品角色

如果系统只需要一个具体的建造者类的时候,可以省略抽象建造者,有时候指挥者类也可以省略,让建造者类同时充当指挥者和建造者

例子实践

package com.extra.licenseLog.model;import java.util.Date;/*** <pre>*     证照操作记录* </pre>** <pre>* @author mazq* 修改记录*    修改后版本:     修改人:  修改日期: 2020/08/15 10:21  修改内容:* </pre>*/
public class LicenseLogModel {/*** 日志SEQ*/private String seq;/*** 痕迹表SEQ*/private String handleSeq;/*** 查验证照用户账号*/private String userCode;/*** 查验证照编码*/private String certCode;/*** 查验证照时间*/private Date certTime;/*** 办件流水号*/private String controlSeq;;public LicenseLogModel() {}public LicenseLogModel(String seq) {this.seq = seq;}public LicenseLogModel(String seq, String handleSeq, String userCode, String certCode, Date certTime, String controlSeq) {this.seq = seq;this.handleSeq = handleSeq;this.userCode = userCode;this.certCode = certCode;this.certTime = certTime;this.controlSeq = controlSeq;}private LicenseLogModel(Builder builder){this.seq = builder.seq;this.handleSeq = builder.handleSeq;this.userCode = builder.userCode;this.certCode = builder.certCode;this.certTime = builder.certTime;this.controlSeq = builder.controlSeq;}public String getSeq() {return seq;}public void setSeq(String seq) {this.seq = seq;}public String getHandleSeq() {return handleSeq;}public void setHandleSeq(String handleSeq) {this.handleSeq = handleSeq;}public String getUserCode() {return userCode;}public void setUserCode(String userCode) {this.userCode = userCode;}public Date getCertTime() {return certTime;}public void setCertTime(Date certTime) {this.certTime = certTime;}public String getCertCode() {return certCode;}public void setCertCode(String certCode) {this.certCode = certCode;}public String getControlSeq() {return controlSeq;}public void setControlSeq(String controlSeq) {this.controlSeq = controlSeq;}public static class Builder {private String seq;private String handleSeq;private String userCode;private String certCode;private Date certTime;private String controlSeq;public Builder(String seq){this.seq = seq;}public Builder setSeq(String seq) {this.seq = seq;return this;}public Builder setHandleSeq(String handleSeq) {this.handleSeq = handleSeq;return this;}public Builder setUserCode(String userCode) {this.userCode = userCode;return this;}public Builder setCertCode(String certCode){this.certCode = certCode;return this;}public Builder setCertTime(Date certTime) {this.certTime = certTime;return this;}public Builder setControlSeq(String controlSeq){this.controlSeq = controlSeq;return this;}public LicenseLogModel build(){return new LicenseLogModel(this);}}@Overridepublic String toString() {return "LicenseLogModel{" +"seq='" + seq + '\'' +", handleSeq='" + handleSeq + '\'' +", userCode='" + userCode + '\'' +", certCode='" + certCode + '\'' +", certTime=" + certTime +", controlSeq='" + controlSeq + '\'' +'}';}
}
LicenseLogModel logModel = new LicenseLogModel.Builder(commonService.generateUUID()).setHandleSeq(controlStuff.getHandleSeq()).setUserCode(userCode).setCertCode(authCode).setCertTime(new Date(System.currentTimeMillis())).setControlSeq(controlStuff.getControlSeq()).build();

参考同事写的工具类:

package com.template.utils;import java.util.HashMap;
import java.util.Map;
/*** 信息工具类* @date 2018-05-22*/
public class Maps {/*** 成功状态值*/public static final String SUCCESS_VALUE = "1";/*** 失败状态值*/public static final String ERROR_VALUE = "0";/*** 信息key*/public static final String MESSAGE_KEY = "message";/*** 状态key*/public static final String STATE_KEY = "status";/*** 数据key*/public static final String DATA_KEY = "data";private Maps(){}/*** 获取信息MapMessage实例* @return*/public static MapMessageBulider MapMessageBulider(){return new MapMessageBulider();}/*** 内部类:信息* @author csy* @date 2018-05-22*/public static class MapMessageBulider{private Map<String, Object> innerMap = new HashMap<String, Object>();/*** 自由封装key/value* @param key* @param value* @return*/public MapMessageBulider setKeyValue(String key,Object value){this.innerMap.put(key, value);return this;}/*** 返回map* @return*/public Map<String, Object> bulid(){return this.innerMap;}/*** 设置成功返回值及信息* 已设置默认的success/message/data key* @param data 数据* @param message 成功信息* @return*/public Map<String, Object> setSuccessBulid(Object data,Object message){this.setKeyValue(STATE_KEY, SUCCESS_VALUE).setKeyValue(MESSAGE_KEY, message).setKeyValue(DATA_KEY, data);return this.bulid();}/*** 设置返回失败数据及信息* 已设置默认的success/message/data key* @param data 数据* @param message 失败信息* @return*/public Map<String, Object> setErrorBulid(Object data,Object message){this.setKeyValue(STATE_KEY, ERROR_VALUE).setKeyValue(MESSAGE_KEY, message).setKeyValue(DATA_KEY, data);return this.bulid();          }}
}

设计模式系列之建造者模式构建实体类相关推荐

  1. 设计模式之路 | 建造者模式

    模式的定义与特点 建造者(Builder)模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式.它是将一个复杂的对象分解为多个简单的对象 ...

  2. 设计模式系列·抽象工厂模式

    前言 以小说的笔法写的设计模式系列文章,你绝对看得懂![首发于公众号:"聊聊代码"] 设计模式系列·王小二需求历险记(一) 设计模式系列·王小二需求历险记(二) 设计模式系列·封装 ...

  3. Java设计模式系列--责任链模式(应用)

    原文网址:Java设计模式系列--责任链模式(应用)_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍Java设计模式中的责任链模式的一些使用场景. 责任链模式的好处 符合单一职责原则 每个功能 ...

  4. Java设计模式10,建造者模式

    目录 一.建造者模式 二.建造者模式的结构 1.抽象建造者(Builder) 2.具体建造者(ConcreteBuilder) 3.指挥者(Director) 4.产品(Product) 三.建造者模 ...

  5. 【设计模式自习室】建造者模式

    前言 <设计模式自习室>系列,顾名思义,本系列文章带你温习常见的设计模式.主要内容有: 该设计模式的详细介绍,包括: 引子,意图(大白话解释) 类图,时序图(理论规范) 该模式的代码示例: ...

  6. 设计模式---5(建造者模式的概念及其实现,建造者模式的角色与职责,建造者模式和工厂模式的区别)

    建造者模式 建造者模式的概念 Builder 模式也叫建造者模式或者生成器模式,是由 GoF 提出的 23 种设计模式中的一种. Builder 模式是一种对象创建型模式之一,用来隐藏复合对象的创建过 ...

  7. Java描述设计模式(06):建造者模式

    一.生活场景 基于建造者模式,描述软件开发的流程. 1.代码实现 /*** 基于建造者模式描述软件开发*/ public class C01_InScene {public static void m ...

  8. Java 设计模式情景分析——建造者模式

    当我们遇到类似汽车的装配,需要车轮.方向盘.发动机,还有各种小零件时,为了在构建过程中隐藏实现细节,就可以使用建造者模式 (Builder模式) 将部件和组装过程分离,使得构建过程和部件都可以自由扩展 ...

  9. 设计模式二:建造者模式

    建造者模式 想要创建一个由多个部分构成的对象,而且他的构成需要一步接一步地完成.只有当各个部分都创建好,这个对象才是完整的.这时就需要建造者模式 建造者设计模式:将一个复杂对象的构造过程与其表现分离, ...

最新文章

  1. java ftp 下载慢_Java实现ftp文件上传下载解决慢中文乱码多个文件下载等问题
  2. Tizen 2.0 SDK 和源码发布
  3. 可变数组NSMutableArray
  4. SAP UI5应用和Hybris Commerce的国际化(internationalization)支持
  5. HALCON示例程序classify_image_class_mlp.hdev如何使用MLP分类器分割RGB图像
  6. 【HDU - 1465 】不容易系列之一 (组合数学,错排)
  7. spring cloud每次修改必须重新打包_Java面试系列spring相关
  8. 《唐人街探案3》回归春节档,2021大年初一上映!
  9. python垃圾分类图像识别算法_用算法帮上海大妈垃圾分类,扔错罚款!长点心吧你...
  10. 第十三次博文:教你从立创EDA库导入AD库,保姆级别!
  11. matlab中的imnoise信噪比,matlab语法fn=imnoise(f,'gaussian',0,0.02)是给f添加高斯噪声,其中数值0和0.02分别表示___和___?...
  12. MDR的进阶版本-GMDR
  13. python文件查重_海量文件查重SimHash和Minhash
  14. EyouCms前台GetShell漏洞复现
  15. 中国历史各王朝的知识点总结记忆
  16. IOL2020中国初选第一题题解
  17. Linux怎么彻底删除用户
  18. 绿茶集团在港上市申请再失效:王勤松夫妇为实控人,翻台率不及格
  19. 政府采购的质疑与投诉
  20. 苹果手机怎么清理喇叭灰尘_手机喇叭声音小怎么办?打电话听不见怎样清灰?...

热门文章

  1. 微信小程序实现单元格编辑功能,并支持计算合计
  2. php中的rtrim_php中如何使用rtrim函数
  3. 联想扬天V14锐龙版2023款 参数 联想扬天V14锐龙版2023款怎么样
  4. 使用Burpsuite抓取IOS,Android(安卓)手机app数据
  5. 1DCNN 2DCNN LeNet5,VGGNet16使用tensorflow2.X实现
  6. 【python】一篇讲透背包问题(01背包 完全背包 多重背包 二维费用背包)
  7. 深度学习了40万个表情,一大波AI 表情包来了
  8. 2020届华为勇敢星实习面试经验贴-------硬件类逻辑岗位
  9. 科技周刊第十三期:业余选手和专业选手的区别
  10. 浅谈我对直播业务的理解