我们在构建一个MAP时,要不停的调用put,有时候看着觉得很麻烦,刚好,看了下builder模式,觉得这思路不错,于是乎,照着用builder模式写了一个构建MAP的示例,代码如下:

import java.util.HashMap;
import java.util.Map; public class MapBuilder<T> { public Builder<T> b; public MapBuilder(Builder<T> b){
this.b = b;
} public Map<String,T> map(){
return b.map;
} public T get(String key){
return b.map.get(key);
} public static class Builder<T>{ public Map<String, T> map; public Builder(){
map = new HashMap<String, T>();
} public Builder<T> map(String key, T value){
map.put(key, value);
return this;
} public MapBuilder<T> build(){
return new MapBuilder<T>(this);
}
} public static void main(String[] args) {
MapBuilder<String> build = new MapBuilder.Builder<String>().map("a", "b").build();
System.out.println(build.get("a"));
} }
public class ListBuilder<T> {

	public Builder<T> b;

	public ListBuilder(Builder<T> b){
this.b = b;
} public List<T> list(){
return b.list;
} public T get(int index){
return b.list.get(index);
} public static class Builder<T>{ public List<T> list; public Builder(){
list = new ArrayList<T>();
} public Builder<T> add(T value){
list.add(value);
return this;
} public ListBuilder<T> build(){
return new ListBuilder<T>(this);
}
} public static void main(String[] args) {
ListBuilder<String> build = new ListBuilder.Builder<String>().add("a").add("b").build();
System.out.println(build.get(0));
} }

代码很简单,甚至都不用特殊说明,但里面的知识点还是蛮多的,比如builder模式,比如泛型的使用。

大家可以在项目中试用一下,能使代码更加的简洁漂亮!

JAVA Builder模式构建MAP/LIST的示例的更多相关文章

  1. Java Builder模式 体验(二)

       在上篇文章中,对Java Builder模式的使用体验主要是从Builder对构造器改造方面的优秀特性来说的,感觉并没有从Java Builder模式本身的功能和作用去写,因此决定再从Build ...

  2. Java设计模式--Java Builder模式

    1.Java Builder模式主要是用一个内部类去实例化一个对象,避免一个类出现过多构造函数,而且构造函数如果出现默认参数的话,很容易出错. public Person(String name) P ...

  3. Java Builder 模式,你搞明白了么?

    Builder 模式定义 Builder 模式中文叫作建造者模式,又叫生成器模式,它属于对象创建型模式,是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.建造者模式是一步一步 ...

  4. Java Builder 模式,你搞懂了么?

    加油.png 前言:最近闲来无事的时候想着看看一些平常用的三方库源码,没想到看了之后才知道直接撸源码好伤身体,一般设计优秀的开源库都会涉及很多的设计模式,就比如 android 开发使用频繁的 okH ...

  5. java Builder模式创建不可变类

    package com.geostar.gfstack.operationcenter.logger.manager.common; /** * Created by Nihaorz on 2017/ ...

  6. java - Builder模式实例化对象

    Builder 优雅的链式调用来实现实例化对象 1.  首先在实体类中,构造一个Builder内部类,由Builder来完成Person的属性赋值,并最终执行build来完成Person的实例化 pa ...

  7. GOF对Builder模式的定义(转载)

    (1)意图 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. (2)适用性 1. 当创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式:2. 当构造过程必须允许构 ...

  8. Effective Java 第三版——2. 当构造方法参数过多时使用builder模式

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  9. 深入探索Java设计模式之构建器模式(五)

    抽丝剥茧 细说架构那些事——[优锐课] 简单的程序不需要大量的设计过程,因为它们只关注有限的解决方案,仅使用几个类.大型程序专注于广泛的设计,该设计比好的设计范例的任何其他属性都更能利用可重用性.宏伟 ...

随机推荐

  1. Eclipse-修改工程名

    Eclipse-修改工程名 来自:http://southking.iteye.com/blog/1821754   直接修改工程可能会产生一些莫名其妙的问题,需遵循以下四步: 1. 右键工程:Ref ...

  2. dialog 中装listview并让每一个item分隔悬空,并具有radiobutton的效果

    先上图 两个关键地方,一是让dialog全透明,二是让listitem分开. 首先定义一个自定义的dialog 布局文件,这个只是包含一个listview而已 <?xml version=&qu ...

  3. github 仓库管理

    一.远程仓库有master和dev分支1. 克隆代码 git clone https://github.com/master-dev.git # 这个git路径是无效的,示例而已 2. 查看所有分支 ...

  4. openssl,db,mysql,sasl编译安装

    yum -y install nfs-utils nfs4-acl-tools nfs-utils-libyum -y install gcc gcc* libtool libtools-ltdl l ...

  5. cocos2dx release note

    [传送门] 发布说明: https://github.com/fusijie/Cocos2dx-ReleaseNote-zh/blob/master/SUMMARY.md 更新记录: https:// ...

  6. C#之Action

    Action<T> 委托 class Program { static void Main(string[] args) { MyDelegate<string>(MyFunc ...

  7. 微信小程序事件始末及相关资料整理

    转载请注明来源:前端之巅 微信公众号 小道消息 昨晚(9月21日晚)10:51,冯大辉在他的知名微信公众号小道消息上发了一篇7字标题的文章<微信应用号来了>,并加了"微信是一个操 ...

  8. Dynamic CRM 2013学习笔记(五)禁止修改、删除审批通过后的单据

    审批通过后的单据,一般要对其进行控制,不能修改,不能添加,删除等,下面分别介绍下如何实现: 一. 禁止修改: 1. 主表控制,如果页面上审批状态为审批中或审批通过,就把整个页面都disable掉 1: ...

  9. Dynamic CRM 2013学习笔记(九)CrmFetchKit.js介绍:Fetchxml、多表联合查询, 批量更新

    CrmFetchKit.js是一个跨浏览器的一个类库,允许通过JavaScript来执行fetch xml的查询,还可以实现批量更新,分页查询等.目前已支持Chrome 25, Firefox 19 ...

  10. 客户端缓存 HTML + 远程数据 JS 的思路。

    移动客户端,采用客户端集成 WebBrowser 的方式 ,加载远程网页的优化方案. 1. 远程 HTML版本 v1.2 一次性加载到客户端 2. 手机端打开时,检测HTML版本. 如果有新版,先更新 ...