欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java 建造者模式(线程安全版)

程序员文章站 2022-05-04 22:14:26
...

 

   代码:

   

 

package com.zhaoyou.tars.common;


/**
 * @author: Mr_Q
 * @create: 2019-03-12 11:40
 * @program: basic-client-test
 * @description:
 **/
public class HeaderReqVo {


    /***
     *
     *  "version": // 版本号
     *         "traceId"://贯穿始终的ID, 调用方传
     *         "timestamp": //自己的当前时间
     *         "id":  自己的服务ID
     *         "method":com.zhaoyou.osd.service.osp.xxx  //自己方法名
     *         "ip"://自己的IP
     *
     *
     */
    private final String version;
    private final String traceId;
    private final String timestamp;
    private final String id;
    private final String method;
    private final String ip;


    public static HeaderInner create(){
        return new HeaderInner();
    }


    public static final class HeaderInner {
        private String version;
        private String traceId;
        private String timestamp;
        private String id;
        private String method;
        private String ip;

        public HeaderInner setVersion(String version) {
            this.version = version;
            return this;
        }

        public HeaderInner setTraceId(String traceId) {
            this.traceId = traceId;
            return this;
        }

        public HeaderInner setTimestamp(String timestamp) {
            this.timestamp = timestamp;
            return this;
        }

        public HeaderInner setId(String id) {
            this.id = id;
            return this;
        }

        public HeaderInner setMethod(String method) {
            this.method = method;
            return this;
        }

        public HeaderInner setIp(String ip) {
            this.ip = ip;
            return this;
        }


        public HeaderReqVo build() {
            return new HeaderReqVo(this);
        }

    }

    private HeaderReqVo(HeaderInner builder) {
        this.version = builder.version;
        this.traceId = builder.traceId;
        this.timestamp = builder.timestamp;
        this.id = builder.id;
        this.method = builder.method;
        this.ip = builder.ip;
    }

    @Override
    public String toString() {
        return "HeaderReqVo{" +
                "version='" + version + '\'' +
                ", traceId='" + traceId + '\'' +
                ", timestamp='" + timestamp + '\'' +
                ", id='" + id + '\'' +
                ", method='" + method + '\'' +
                ", ip='" + ip + '\'' +
                '}';
    }
}

 

   测试:

 

  

    public static void main(String[] args) {
        ExecutorService executorService = Executors.newFixedThreadPool(10);
        executorService.execute(()->{
            HeaderReqVo getUserInfo = HeaderReqVo.create().setVersion("1.0").setTraceId("user.server").setTimestamp(String.valueOf(System.currentTimeMillis())).setId("111").setMethod("getUserInfo").setIp("127.0.0.1").build();
            System.out.println(getUserInfo);
        });
        executorService.execute(()->{
            HeaderReqVo getUserInfo = HeaderReqVo.create().setVersion("2.0").setTraceId("user.server2").setTimestamp(String.valueOf(System.currentTimeMillis())).setId("222").setMethod("getUserInfo2").setIp("127.0.0.2").build();
            System.out.println(getUserInfo);
        });

    }

 

  结果

   
java 建造者模式(线程安全版)
            
    
    博客分类: java java建造者模式内部类线程安全
  

       优点:

         (1) 继承建造者的优点,解耦

         (2) 使用链式编程,可读性好  

 

 

   注意点:标红部分为注意点,不然会出现多线程问题

 

 

  • java 建造者模式(线程安全版)
            
    
    博客分类: java java建造者模式内部类线程安全
  • 大小: 15.8 KB