好处:

  能保证重叠构造器模式的安全性;

  能保证JAVABeans模式的可读性;

package cn.lonecloud.builder;
/**
* 使用内部类构建器来对这个类进行构造
* @Title: MyConstractor.java
* @Package cn.lonecloud.builder
* @Description:
* @author lonecloud
* @webSite http://wwww.lonecloud.cn
* @date 2016年9月12日 上午10:17:11
*/
public class MyConstractor { //some field of class
private final int size; private final int servings; private final int fat; private final int sodium; private final int age;
//using getMethod
public int getSize() {
return size;
}
public int getServings() {
return servings;
}
public int getFat() {
return fat;
}
public int getSodium() {
return sodium;
}
public int getAge() {
return age;
} @Override
public String toString() {
return "MyConstractor [size=" + size + ", servings=" + servings
+ ", fat=" + fat + ", sodium=" + sodium + ", age=" + age + "]";
}
//using constractMethod init field
private MyConstractor(Builder builder){
this.size=builder.size;
this.servings=builder.servings;
this.fat=builder.fat;
this.sodium=builder.sodium;
this.age=builder.age;
}
//using static class to set this class
public static class Builder{
//some field of staticClass
private final int size; private final int servings;
//using method to set field
private int fat=0; private int sodium=0; private int age=0;
//using constractorMethod to init this final field
public Builder(int size, int servings) {
this.size = size;
this.servings = servings;
}
//write method to set field;
public Builder fat(int fat){
this.fat=fat;
return this;
}
public Builder sodium(int sodium){
this.sodium=sodium;
return this;
}
public Builder age(int age){
this.age=age;
return this;
}
//return MyConstractor
public MyConstractor build(){
return new MyConstractor(this);
} }
}

测试类:

package cn.lonecloud.constactor;

import org.junit.Test;

import cn.lonecloud.builder.MyConstractor;

public class MyTest {

	@Test
public void constractorTest(){
MyConstractor myConstractor = new MyConstractor.Builder(1,2).age(100).build();
System.out.println(myConstractor.toString());
}
}

Java采用内部构造器Builder模式进行对类进行构建的更多相关文章

  1. 疯狂的类构造器Builder模式,链式调用

    疯狂的类构造器 最近栈长在做 Code Review 时,发现一段创建对象的方法: Task task = new Task(112, "紧急任务", "处理一下这个任务 ...

  2. Builder模式的目的是解耦构建过程,为什么要用内部类?

    还没有看过Builder模式的作用,看过一篇介绍Builder模式的文章,这里是关于Builder模式的思考:思考是否有比新建一个内部类更好的方法,首先想到的是 package xyz.n490808 ...

  3. Java采用反射技术创建对象后对目标类的成员变量和成员方法进行访问

    实现: package com.ljy; import java.lang.reflect.Field; import java.lang.reflect.Method; /** * * @Class ...

  4. Builder模式在Java中的应用

    在设计模式中对Builder模式的定义是用于构建复杂对象的一种模式,所构建的对象往往需要多步初始化或赋值才能完成.那么,在实际的开发过程中,我们哪些地方适合用到Builder模式呢?其中使用Build ...

  5. Java设计模式(3)建造者模式(Builder模式)

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

  6. Builder模式在Java中的应用(转)

    在设计模式中对Builder模式的定义是用于构建复杂对象的一种模式,所构建的对象往往需要多步初始化或赋值才能完成.那么,在实际的开发过程中,我们哪些地方适合用到Builder模式呢?其中使用Build ...

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

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

  8. Builder模式(建造者模式)

    在设计模式中对Builder模式的定义是用于构建复杂对象的一种模式,所构建的对象往往需要多步初始化或赋值才能完成.那么,在实际的开发过程中,我们哪些地方适合用到Builder模式呢?其中使用Build ...

  9. 当构造方法参数过多时使用builder模式

    静态工厂和构造方法都有一个限制:它们不能很好地扩展到很多可选参数的情景.请考虑一个代表包装食品上的营养成分标签的例子.这些标签有几个必需的属性——每次建议的摄入量,每罐的份量和每份卡路里 ,以及超过 ...

随机推荐

  1. eclipse 用maven创建web项目

    Eclipse 用maven构建web项目 (2013-01-27 11:05:31) 转载▼ 标签: it eclipse maven spring web 杂谈   一.背景介绍 对于初学者,用m ...

  2. 把一个DIV放到另一个div右下角

    父对象相对定位,子对象以父对象为参考点绝对定位:外层的div设置为相对定位,内层的div设置为绝对定位: <div id="box1"> <div id=&quo ...

  3. JAR包数字签名与验证

    经签名的Jar包内包含了以下内容: 原Jar包内的class文件和资源文件 签名文件 META-INF/*.SF:这是一个文本文件,包含原Jar包内的class文件和资源文件的Hash 签名block ...

  4. Linux指令--route

    Linux系统的route命令用于显示和操作IP路由表(show / manipulate the IP routing table).要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或 ...

  5. jdk源码->集合->ArrayList

    类的属性 public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomA ...

  6. zabbix监控-percona监控MySQL(三)

    监控MySQL实战 标签(linux): zabbix & mysql 笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 percona为MySQL制作了专 ...

  7. 【转】matlab针对不同格式文件的读写

    本技术支持指南主要处理:ASCII, binary, and MAT files.要得到MATLAB中可用来读写各种文件格式的完全函数列表,可以键入以下命令: help iofun MATLAB中有两 ...

  8. CGI编程

    1简介 .CGI:通用网关接口(Common Gateway Interface)是一个Web服务器主机提供信息服务的标准接口,服务器和客户端之间的通信,是客户端的浏览器和服务器端的http服务器之间 ...

  9. TensorflowTutorial_一维数据构造简单CNN

    使用一维数据构造简单卷积神经网络 觉得有用的话,欢迎一起讨论相互学习~Follow Me 神经网络对于一维数据非常重要,时序数据集.信号处理数据集和一些文本嵌入数据集都是一维数据,会频繁的使用到神经网 ...

  10. node-glob的*匹配

    目录结构 src/js/libs/app.js src/js/index.js 测试脚本 var glob = require('glob') glob('', {}, function (err, ...