天天看點

設計模式系列之建造者模式建構實體類

設計模式系列之建造者模式(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);
        }
    }

    @Override
    public 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();			
		}
	}
}           

複制