代码:
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) 使用链式编程,可读性好
注意点:标红部分为注意点,不然会出现多线程问题
相关推荐
java设计模式【之】建造者模式【源码】【场景:车辆组装】 将复杂的对象构建,与对象的使用进行分离 用户只需要通过简单流程即可创建出对象 方法调用顺序,步骤的不同实现 优点:封装性号,创建和使用分离,扩展性...
建造者模式 单例模式 结构型模式 队列模式 桥接模式 组合模式 装饰模式 外观模式 享元模式 代理模式 行为模式(类行为模式) 解释器模式 模板方法模式 行为模式(对象行为模式) 策略模式 观察者模式 状态模式 导入...
设计模式可以分为三大类:创建型模式(如单例模式、工厂模式、抽象工厂模式、建造者模式和原型模式),结构型模式(如适配器模式、装饰器模式、代理模式、桥接模式、组合模式、外观模式和享元模式)以及行为型模式...
2. **创建型模式**:如单例模式、工厂模式(简单工厂、工厂方法、抽象工厂)、建造者模式和原型模式,它们关注对象的创建过程。 3. **结构型模式**:包括适配器模式、装饰器模式、代理模式、桥接模式、组合模式、...
除了以上的基本设计模式,还可能包括策略模式、模板方法模式、建造者模式、代理模式等,它们在实际开发中都有广泛应用。 总之,“Java多线程编程实战指南+设计模式篇(全部)”是一份宝贵的资源,它将帮助读者深入...
3. 建造者模式:在多线程环境下,建造者模式可以避免因线程同步而导致的对象构建错误。 4. 状态模式:当对象的行为依赖于它的状态时,可以使用状态模式来使代码更清晰,同时允许状态转换逻辑独立于对象的其他行为。 ...
当构造函数的参数很多时,使用建造者模式可以避免参数顺序混乱的问题,使代码更易于理解和维护。 ### 原型模式 原型模式是一种创建型设计模式,它使用已有的实例作为原型,通过复制该原型对象来创建新对象,而不是...
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 ...
- 建造者模式:将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。 - 结构型模式:适配器模式、装饰器模式、桥接模式、组合模式、外观模式、享元模式、代理模式。 - 行为型模式:责任链模式...
8. **建造者模式**:将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。在Java中,`Builder`类常用于构建复杂的对象结构。 9. **模版方法模式**:定义一个操作中的算法骨架,而将一些步骤延迟...
在Java中,单例模式可以通过懒汉式(线程不安全)、饿汉式(静态常量)和双重检查锁定等方式实现。这种模式广泛应用于配置管理、日志服务等场景。 2. **工厂模式**:提供一个创建对象的接口,但允许子类决定实例化...
建造者模式是一种创建型模式,它将一个复杂对象的构建与其表示相分离,使得相同的构建过程可以创建不同的表示。该模式适用于构建复杂对象的过程。通过分离构建逻辑和表示逻辑,可以更加灵活地创建对象的不同变体。 ...
- **建造者模式**:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 - **原型模式**:通过复制现有实例来创建新实例,而不是通过创建新实例然后初始化的方式。 #### 结构型模式 - **...
4. 建造者模式:建造者模式将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。它允许用户只关注产品的构建过程,而不关心具体实现细节。 5. 工具类模式:如静态工厂方法,不鼓励实例化,而是...
在Java中,建造者模式常用于创建复杂的对象,如配置文件、数据库连接等。它通过一步步构建过程,使得构造过程更加可控,同时允许用户在不改变构造逻辑的情况下,修改对象的构造细节。 5. 组合模式(Composite): ...
在Java中,可以通过创建一个构建者类和多个指导者类来实现建造者模式,这样可以更灵活地构造对象。 7. 模板方法模式:模板方法模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个...
创建型模式如单例(Singleton)、工厂方法(Factory Method)和建造者(Builder)等,关注于对象的创建过程,使系统的创建过程更加灵活、易于管理。结构型模式如适配器(Adapter)、装饰器(Decorator)和代理...
3. **建造者模式**:建造者模式是一种创建型设计模式,它将复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。这有助于我们在不改变结构的情况下,修改对象的构建方式。 4. **单例模式**:单例...
在Java中,建造者模式常用于创建复杂对象,如数据库连接字符串、XML解析器配置等。 10. **状态模式**:状态模式允许对象在内部状态改变时改变其行为,看起来像是改变了其类。Java中的状态模式常用于处理对象状态的...
在Java中,可以使用枚举、双重检查锁定或静态内部类来实现单例,以保证线程安全和防止反序列化创建新实例。 2. **工厂模式(Factory)** 工厂模式提供了一个创建对象的接口,但让子类决定实例化哪一个类。它封装了...