设计模式系列之建造者模式构建实体类
设计模式系列之建造者模式(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(); }}
}
设计模式系列之建造者模式构建实体类相关推荐
- 设计模式之路 | 建造者模式
模式的定义与特点 建造者(Builder)模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式.它是将一个复杂的对象分解为多个简单的对象 ...
- 设计模式系列·抽象工厂模式
前言 以小说的笔法写的设计模式系列文章,你绝对看得懂![首发于公众号:"聊聊代码"] 设计模式系列·王小二需求历险记(一) 设计模式系列·王小二需求历险记(二) 设计模式系列·封装 ...
- Java设计模式系列--责任链模式(应用)
原文网址:Java设计模式系列--责任链模式(应用)_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍Java设计模式中的责任链模式的一些使用场景. 责任链模式的好处 符合单一职责原则 每个功能 ...
- Java设计模式10,建造者模式
目录 一.建造者模式 二.建造者模式的结构 1.抽象建造者(Builder) 2.具体建造者(ConcreteBuilder) 3.指挥者(Director) 4.产品(Product) 三.建造者模 ...
- 【设计模式自习室】建造者模式
前言 <设计模式自习室>系列,顾名思义,本系列文章带你温习常见的设计模式.主要内容有: 该设计模式的详细介绍,包括: 引子,意图(大白话解释) 类图,时序图(理论规范) 该模式的代码示例: ...
- 设计模式---5(建造者模式的概念及其实现,建造者模式的角色与职责,建造者模式和工厂模式的区别)
建造者模式 建造者模式的概念 Builder 模式也叫建造者模式或者生成器模式,是由 GoF 提出的 23 种设计模式中的一种. Builder 模式是一种对象创建型模式之一,用来隐藏复合对象的创建过 ...
- Java描述设计模式(06):建造者模式
一.生活场景 基于建造者模式,描述软件开发的流程. 1.代码实现 /*** 基于建造者模式描述软件开发*/ public class C01_InScene {public static void m ...
- Java 设计模式情景分析——建造者模式
当我们遇到类似汽车的装配,需要车轮.方向盘.发动机,还有各种小零件时,为了在构建过程中隐藏实现细节,就可以使用建造者模式 (Builder模式) 将部件和组装过程分离,使得构建过程和部件都可以自由扩展 ...
- 设计模式二:建造者模式
建造者模式 想要创建一个由多个部分构成的对象,而且他的构成需要一步接一步地完成.只有当各个部分都创建好,这个对象才是完整的.这时就需要建造者模式 建造者设计模式:将一个复杂对象的构造过程与其表现分离, ...
最新文章
- java ftp 下载慢_Java实现ftp文件上传下载解决慢中文乱码多个文件下载等问题
- Tizen 2.0 SDK 和源码发布
- 可变数组NSMutableArray
- SAP UI5应用和Hybris Commerce的国际化(internationalization)支持
- HALCON示例程序classify_image_class_mlp.hdev如何使用MLP分类器分割RGB图像
- 【HDU - 1465 】不容易系列之一 (组合数学,错排)
- spring cloud每次修改必须重新打包_Java面试系列spring相关
- 《唐人街探案3》回归春节档,2021大年初一上映!
- python垃圾分类图像识别算法_用算法帮上海大妈垃圾分类,扔错罚款!长点心吧你...
- 第十三次博文:教你从立创EDA库导入AD库,保姆级别!
- matlab中的imnoise信噪比,matlab语法fn=imnoise(f,'gaussian',0,0.02)是给f添加高斯噪声,其中数值0和0.02分别表示___和___?...
- MDR的进阶版本-GMDR
- python文件查重_海量文件查重SimHash和Minhash
- EyouCms前台GetShell漏洞复现
- 中国历史各王朝的知识点总结记忆
- IOL2020中国初选第一题题解
- Linux怎么彻底删除用户
- 绿茶集团在港上市申请再失效:王勤松夫妇为实控人,翻台率不及格
- 政府采购的质疑与投诉
- 苹果手机怎么清理喇叭灰尘_手机喇叭声音小怎么办?打电话听不见怎样清灰?...
热门文章
- 微信小程序实现单元格编辑功能,并支持计算合计
- php中的rtrim_php中如何使用rtrim函数
- 联想扬天V14锐龙版2023款 参数 联想扬天V14锐龙版2023款怎么样
- 使用Burpsuite抓取IOS,Android(安卓)手机app数据
- 1DCNN 2DCNN LeNet5,VGGNet16使用tensorflow2.X实现
- 【python】一篇讲透背包问题(01背包 完全背包 多重背包 二维费用背包)
- 深度学习了40万个表情,一大波AI 表情包来了
- 2020届华为勇敢星实习面试经验贴-------硬件类逻辑岗位
- 科技周刊第十三期:业余选手和专业选手的区别
- 浅谈我对直播业务的理解