`

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

    博客分类:
  • java
阅读更多

 

   代码:

   

 

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);
        });

    }

 

  结果

   

  

       优点:

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

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

 

 

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

 

 

  • 大小: 15.8 KB
0
0
分享到:
评论

相关推荐

    java设计模式【之】建造者模式【源码】【场景:车辆组装】

    java设计模式【之】建造者模式【源码】【场景:车辆组装】 将复杂的对象构建,与对象的使用进行分离 用户只需要通过简单流程即可创建出对象 方法调用顺序,步骤的不同实现 优点:封装性号,创建和使用分离,扩展性...

    【资源免费下载】Java代码积累丨大话设计模式(Java实现版本)、线程协作

    建造者模式 单例模式 结构型模式 队列模式 桥接模式 组合模式 装饰模式 外观模式 享元模式 代理模式 行为模式(类行为模式) 解释器模式 模板方法模式 行为模式(对象行为模式) 策略模式 观察者模式 状态模式 导入...

    JAVA设计模式与JAVA多线程设计模式详解

    设计模式可以分为三大类:创建型模式(如单例模式、工厂模式、抽象工厂模式、建造者模式和原型模式),结构型模式(如适配器模式、装饰器模式、代理模式、桥接模式、组合模式、外观模式和享元模式)以及行为型模式...

    Java多线程编程实战指南+设计模式篇

    2. **创建型模式**:如单例模式、工厂模式(简单工厂、工厂方法、抽象工厂)、建造者模式和原型模式,它们关注对象的创建过程。 3. **结构型模式**:包括适配器模式、装饰器模式、代理模式、桥接模式、组合模式、...

    Java多线程编程实战指南+设计模式篇(全部)

    除了以上的基本设计模式,还可能包括策略模式、模板方法模式、建造者模式、代理模式等,它们在实际开发中都有广泛应用。 总之,“Java多线程编程实战指南+设计模式篇(全部)”是一份宝贵的资源,它将帮助读者深入...

    Java多线程编程实战指南 设计模式篇

    3. 建造者模式:在多线程环境下,建造者模式可以避免因线程同步而导致的对象构建错误。 4. 状态模式:当对象的行为依赖于它的状态时,可以使用状态模式来使代码更清晰,同时允许状态转换逻辑独立于对象的其他行为。 ...

    Java设计模式(影印版)

    当构造函数的参数很多时,使用建造者模式可以避免参数顺序混乱的问题,使代码更易于理解和维护。 ### 原型模式 原型模式是一种创建型设计模式,它使用已有的实例作为原型,通过复制该原型对象来创建新对象,而不是...

    java设计模式

    11.4 建造者模式的扩展 11.5 最佳实践 第12章 代理模式 12.1 我是游戏至尊 12.2 代理模式的定义 12.3 代理模式的应用 12.3.1 代理模式的优点 12.3.2 代理模式的应用 12.4 代理模式的扩展 12.4.1 普通代理 12.4.2 ...

    java完整版模式

    - 建造者模式:将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。 - 结构型模式:适配器模式、装饰器模式、桥接模式、组合模式、外观模式、享元模式、代理模式。 - 行为型模式:责任链模式...

    Java与模式(阎宏经典版)

    8. **建造者模式**:将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。在Java中,`Builder`类常用于构建复杂的对象结构。 9. **模版方法模式**:定义一个操作中的算法骨架,而将一些步骤延迟...

    Java设计模式(第2版)中文版

    在Java中,单例模式可以通过懒汉式(线程不安全)、饿汉式(静态常量)和双重检查锁定等方式实现。这种模式广泛应用于配置管理、日志服务等场景。 2. **工厂模式**:提供一个创建对象的接口,但允许子类决定实例化...

    java设计模式ppt

    建造者模式是一种创建型模式,它将一个复杂对象的构建与其表示相分离,使得相同的构建过程可以创建不同的表示。该模式适用于构建复杂对象的过程。通过分离构建逻辑和表示逻辑,可以更加灵活地创建对象的不同变体。 ...

    《Java与模式》PDF版本下载.txt

    - **建造者模式**:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 - **原型模式**:通过复制现有实例来创建新实例,而不是通过创建新实例然后初始化的方式。 #### 结构型模式 - **...

    java 设计模式详解

    4. 建造者模式:建造者模式将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。它允许用户只关注产品的构建过程,而不关心具体实现细节。 5. 工具类模式:如静态工厂方法,不鼓励实例化,而是...

    Java设计模式之创建型模式的几个小DEMO

    在Java中,建造者模式常用于创建复杂的对象,如配置文件、数据库连接等。它通过一步步构建过程,使得构造过程更加可控,同时允许用户在不改变构造逻辑的情况下,修改对象的构造细节。 5. 组合模式(Composite): ...

    ( java设计模式.zip

    在Java中,可以通过创建一个构建者类和多个指导者类来实现建造者模式,这样可以更灵活地构造对象。 7. 模板方法模式:模板方法模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个...

    Java 企业设计模式

    创建型模式如单例(Singleton)、工厂方法(Factory Method)和建造者(Builder)等,关注于对象的创建过程,使系统的创建过程更加灵活、易于管理。结构型模式如适配器(Adapter)、装饰器(Decorator)和代理...

    23种设计模式的实现(Java 版),java设计模式

    3. **建造者模式**:建造者模式是一种创建型设计模式,它将复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。这有助于我们在不改变结构的情况下,修改对象的构建方式。 4. **单例模式**:单例...

    Java与模式(清晰书签版)

    在Java中,建造者模式常用于创建复杂对象,如数据库连接字符串、XML解析器配置等。 10. **状态模式**:状态模式允许对象在内部状态改变时改变其行为,看起来像是改变了其类。Java中的状态模式常用于处理对象状态的...

    JAVA设计模式

    在Java中,可以使用枚举、双重检查锁定或静态内部类来实现单例,以保证线程安全和防止反序列化创建新实例。 2. **工厂模式(Factory)** 工厂模式提供了一个创建对象的接口,但让子类决定实例化哪一个类。它封装了...

Global site tag (gtag.js) - Google Analytics