文档章节

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

k
 kunping
发布于 2017/02/28 20:33
字数 190
阅读 95
收藏 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
深圳
私信 提问
Java 已老,Kotlin 或将取而代之!

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

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

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

小米米儿小
2013/12/11
0
0
justlive1/oxygen

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

justlive1
10/08
0
0
设计模式-建造者(Builder)

2018-1-18 by Atlas 设计思想 将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品...

水天云黑白
10/28
0
0
Clojure使用Java方法

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

程序员诗人
2016/06/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

为什么要学习Python?这10个理由足够了!

摘要: 看完这十个理由,我决定买本python从入门到精通! 如果你定期关注现今的科技发展,那么你可能想知道我为什么要写这篇文章告诉人们学习Python?因为几年前我提倡Java而不是Python。 在...

阿里云官方博客
21分钟前
2
0
spring服务方式配置okhttp3

问题 如果把OKhttp以Spring服务方式配置,就解决了从配置中心运行时刷新配置参数的问题。 OkHttpConfig.java package com.zyl.config;import okhttp3.OkHttpClient;import org.springfra...

亚林瓜子
21分钟前
2
0
8张图让你一步步看清 async/await 和 promise 的执行顺序

**摘要:**面试必问 原文:8张图帮你一步步看清 async/await 和 promise 的执行顺序 作者:ziwei3749 Fundebug经授权转载,版权归原作者所有。 为什么写这篇文章? 说实话,关于js的异步执行顺...

Fundebug
22分钟前
1
0
Linux 命令菜单

#!/bin/bash #menu.sh menu(){ source ~/.bashrc echo "=================================" echo "Please enter your choise:" echo "(0) Kill all java" echo "(1) Start all tomcat" echo......

mellen
27分钟前
3
0
原来云数据库也是有思想的...

本文由一刻talks发表 邵宗文,腾讯云数据库专家副总监。十余年数据库从业经验,2009年加入腾讯,曾负责腾讯网,新闻客户端,快报,视频,财经,体育等数据库平台部署、规划及运维支持工作。本...

腾讯云加社区
28分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部