文档章节

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

k
 kunping
发布于 2017/02/28 20:33
字数 190
阅读 82
收藏 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
深圳
设计模式8——Builder设计模式

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

小米米儿小
2013/12/11
0
0
Java 已老,Kotlin 或将取而代之!

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

CSDN
05/12
0
0
深入理解JVM内幕:从基本结构到Java 7新特

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

开源中国驻成都办事处
2012/12/06
0
1
Reactive Programming 一种技术,各自表述

前言 作为一名 Java 开发人员,尤其是 Java 服务端工程师,对于 Reactive Programming 的概念似乎相对陌生。随着 Java 9 以及 Spring Framework 5 的相继发布,Reactive 技术逐渐开始被广大从...

小马哥mercyblitz
07/23
0
0
初探java.lang.ClassLoader

一个类加载器是一个负责加载类的对象,给定一个类的二进制名称,类加载器尝试查找或生成组成该类定义的数据信息。典型的是将这个名称转换成文件名称然后从文件系统中读取类文件 每一个类对象...

Rksi5
2014/03/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

阿里云API网关使用教程

API 网关(API Gateway)提供高性能、高可用的 API 托管服务,帮助用户对外开放其部署在 ECS、容器服务等阿里云产品上的应用,提供完整的 API 发布、管理、维护生命周期管理。用户只需进行简...

mcy0425
39分钟前
4
0
解决远程登陆误按ctrl+s锁屏假死恢复

使用putty时,偶尔发生屏幕假死,不能输入等情况。 后来发现,只要数据ctrl+s,就会假死;输入ctrl+q就可以恢复过来。 很多刚从windows转移到linux上来工作的朋友,在用vi/vim编辑文件时,常常...

HJCui
42分钟前
0
0
@Transactional

事务管理是应用系统开发中必不可少的一部分。Spring 为事务管理提供了丰富的功能支持。Spring 事务管理分为编程式和声明式的两种方式。编程式事务指的是通过编码方式实现事务;声明式事务基于...

asdf08442a
46分钟前
2
0
widows下强制解除8080端口占用问题

使用win+R打开命令窗口 输入以下命令查看哪个任务占用了8080端口 netstat -ano |findstr "8080" 然后通过任务id强制关闭占用该端口的进程 tskill 10044 // 自己的试情况而定,这个ID是LISTE...

_Artisan
55分钟前
2
0
productFlavors简单实用

最近项目中,不同环境需要配置的参数越来越多,为了减少修改代码次数。研究了一下productFlavors的使用方式,总结如下 1. as3.0以上版本使用productFlavors时需要指定一个flavorDimensions,...

火云
57分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部