文档章节

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

k
 kunping
发布于 2017/02/28 20:33
字数 190
阅读 87
收藏 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
粉丝 2
博文 61
码字总数 29867
作品 0
深圳
justlive1/oxygen

oxygen 轻量级Java框架 介绍 一个轻量级Java框架 oxygen-core 核心部分 基于cglib的aop实现 提供缓存管理和基于注解的缓存,内置LocalCache和Ehcache实现,可扩展 配置管理,支持${attrs.key...

justlive1
10/08
0
0
Clojure使用Java方法

Clojure使用Java方法 Clojure有个很强大的功能,就是你可以使用Lisp语言风格无缝调用java api(java interop).这无疑是如虎添翼. 调用一个Java对象的方法 语法: 其实都使用的是dot operator,形...

程序员诗人
2016/06/28
0
0
Java 已老,Kotlin 或将取而代之!

点击上方“CSDN”,选择“置顶公众号” 关键时刻,第一时间送达! Java已经成为历史。它无法发展成现代语言,同时保证向后兼容性。但它为我们带来了最好的JVM生态系统,并引导了许多优秀语言...

CSDN
05/12
0
0
设计模式8——Builder设计模式

Builder建造者模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就...

小米米儿小
2013/12/11
0
0
深入理解JVM内幕:从基本结构到Java 7新特

摘要:许多没有深入理解JVM的开发者也开发出了很多非常好的应用和类库。不过,如果你更加理解JVM的话,你就会更加理解Java,这样你会有助于你处理类似于我们前面的案例中的问题。 每个Java开...

开源中国驻成都办事处
2012/12/06
0
1

没有更多内容

加载失败,请刷新页面

加载更多

20181018 上课截图

![](https://oscimg.oschina.net/oscnet/49f66c08ab8c59a21a3b98889d961672f30.jpg) ![](https://oscimg.oschina.net/oscnet/a61bc2d618b403650dbd4bf68a671fabecb.jpg)......

小丑鱼00
9分钟前
0
0
WinDbg

参考来自:http://www.cnit.net.cn/?id=225 SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols ctrl + d to open dump_file Microsoft (R) Windows Debugger Version 6.12.0002.633......

xueyuse0012
今天
2
0
OSChina 周五乱弹 —— 想不想把92年的萝莉退货

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @罗马的王:分享松澤由美的单曲《地球ぎ》 很久没看圣斗士星矢了 《地球ぎ》- 松澤由美 手机党少年们想听歌,请使劲儿戳(这里) @开源中国首...

小小编辑
今天
14
2
springBoot条件配置

本篇介绍下,如何通过springboot的条件配置,控制Bean的创建 介绍下开发环境 JDK版本1.8 springboot版本是1.5.2 开发工具为 intellij idea(2018.2) 开发环境为 15款MacBook Pro 前言 很多时候,...

贺小五
今天
1
0
javascript source map 的使用

之前发现VS.NET会为压缩的js文添加一个与文件名同名的.map文件,一直没有搞懂他是用来做什么的,直接删除掉运行时浏览器又会报错,后来google了一直才真正搞懂了这个小小的map文件背后的巨大...

粒子数反转
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部