文档章节

Java通过Builder建造器实现链式操作

k
 kunping
发布于 2017/02/28 20:33
字数 190
阅读 417
收藏 0

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public final class RequestBuilder {

    private static final String PROCCOD = "PROCCOD";
    private static final String INFBDY = "INFBDY";

    private final Map<Object, Object> root;
    private final List<Object> list;

    private RequestBuilder(String code, String argName) {
        root = newMap();
        list = new ArrayList<Object>();
        Map<Object, Object> tempMap = newMap();
        root.put(PROCCOD, code);
        root.put(INFBDY, tempMap);
        tempMap.put(argName, list);
    }

    public ParamBuilder start() {
        return new ParamBuilder(list);
    }

    public Map<Object, Object> build() {
        return root;
    }

    private <K, V> Map<K, V> newMap() {
        return new HashMap<K, V>();
    }

    public final class ParamBuilder {
        private Map<Object, Object> paramMap = newMap();

        private ParamBuilder(List<Object> list) {
            list.add(paramMap);
        }

        public <K, V> ParamBuilder addParam(K key, V value) {
            this.paramMap.put(key, value);
            return this;
        }

        public RequestBuilder end() {
            return RequestBuilder.this;
        }
    }

    public static RequestBuilder create(String code, String argName) {
        return new RequestBuilder(code, argName);
    }
}




 

public class BuilderTest {
    public static void main(String[] args) {
        Map map = RequestBuilder.create("IMB1", "IMB1X1")
                .start().addParam("hkp", "123").addParam("hello", 1).end()
                .start().addParam("1", "xx1").addParam("2", "xx2").addParam("3", "xx3").end()
                .build();
        Gson gson = new Gson();
        System.out.println(gson.toJson(map));
    }
}

 

© 著作权归作者所有

k
粉丝 3
博文 61
码字总数 29867
作品 0
深圳
私信 提问
加载中

评论(0)

建造者模式 (Builder)

建造者模式 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 一个 Builder 类会一步一...

osc_wme0cmft
2018/10/13
2
0
JVM性能优化系列-(4) 编写高效Java程序

目前已经更新完《Java并发编程》,《Docker教程》和《JVM性能优化》,欢迎关注【后端精进之路】,轻松阅读全部文章。 <div align=center><img src="http://ww1.sinaimg.cn/large/a18449c6gy1g...

osc_5n29qf0u
04/16
4
0
折腾Java设计模式之建造者模式

博文原址:折腾Java设计模式之建造者模式 建造者模式 Separate the construction of a complex object from its representation, allowing the same construction process to create variou......

大萌小路
2019/04/15
32
0
通俗易懂系列 | 设计模式(八):建造者模式

介绍 今天我们将研究java中的Builder模式。Builder 设计模式是一种创造性的设计模式,如工厂模式和抽象工厂模式。当Object包含许多属性时,引入了Builder模式来解决Factory和Abstract Factor...

osc_dos38x1o
2018/10/07
3
0
[Laravel] 03 - DB facade, Query builder & Eloquent ORM

连接数据库 一、Outline 三种操作数据库的方式。 二、Facade(外观)模式 Ref: 解读Laravel,看PHP如何实现Facade? Facade本质上是一个“把工作推给别人做的”的类。 Facade存在的价值,可以...

osc_vo8kvenl
2018/07/01
2
0

没有更多内容

加载失败,请刷新页面

加载更多

ThreadLocal

一、ThreadLocal简介   多线程访问同一个共享变量的时候容易出现并发问题,特别是多个线程对一个变量进行写入的时候,为了保证线程安全,一般使用者在访问共享变量的时候需要进行额外的同步...

architect刘源源
昨天
13
0
微信小程序客服会话卡片、自定义客服消息卡片

一、微信客服会话启用会话卡片 1. open-type="contact" 2. show-message-card =true 更多参考官方文档: https://developers.weixin.qq.com/miniprogram/dev/component/button.html 当前效果......

tianma3798
昨天
6
0
练习Linux常用命令

练习命令 Linux常用命令 Linux中一切皆文件,没有消息就是最好的消息 以下所有命令以centos7为基础, 网络相关配置 测试外网是否连通 安装网卡测试工具,即ifconfig程序 查看网卡 临时修改I...

千年典韦
昨天
10
0
从poison社网站爬取历代作品资料

使用的语言是python,爬取使用的代码包在我的主页有提供. 其中一些相关的数据设定如下(复制为data.py,然后运行主页提供的包的main.py): from mypython import *CODE = '4fjl_fjiepq24x' #...

setycyas
昨天
36
0
确定已安装的PowerShell版本 - Determine installed PowerShell version

问题: 如何确定计算机上安装了哪个版本的PowerShell,以及是否确实安装了该版本? 解决方案: 参考一: https://stackoom.com/question/7euv/确定已安装的PowerShell版本 参考二: https://...

技术盛宴
昨天
24
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部