Java采用内部构造器Builder模式进行对类进行构建
好处:
能保证重叠构造器模式的安全性;
能保证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模式进行对类进行构建的更多相关文章
- 疯狂的类构造器Builder模式,链式调用
疯狂的类构造器 最近栈长在做 Code Review 时,发现一段创建对象的方法: Task task = new Task(112, "紧急任务", "处理一下这个任务 ...
- Builder模式的目的是解耦构建过程,为什么要用内部类?
还没有看过Builder模式的作用,看过一篇介绍Builder模式的文章,这里是关于Builder模式的思考:思考是否有比新建一个内部类更好的方法,首先想到的是 package xyz.n490808 ...
- Java采用反射技术创建对象后对目标类的成员变量和成员方法进行访问
实现: package com.ljy; import java.lang.reflect.Field; import java.lang.reflect.Method; /** * * @Class ...
- Builder模式在Java中的应用
在设计模式中对Builder模式的定义是用于构建复杂对象的一种模式,所构建的对象往往需要多步初始化或赋值才能完成.那么,在实际的开发过程中,我们哪些地方适合用到Builder模式呢?其中使用Build ...
- Java设计模式(3)建造者模式(Builder模式)
Builder模式定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构 ...
- Builder模式在Java中的应用(转)
在设计模式中对Builder模式的定义是用于构建复杂对象的一种模式,所构建的对象往往需要多步初始化或赋值才能完成.那么,在实际的开发过程中,我们哪些地方适合用到Builder模式呢?其中使用Build ...
- Effective Java 第三版——2. 当构造方法参数过多时使用builder模式
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- Builder模式(建造者模式)
在设计模式中对Builder模式的定义是用于构建复杂对象的一种模式,所构建的对象往往需要多步初始化或赋值才能完成.那么,在实际的开发过程中,我们哪些地方适合用到Builder模式呢?其中使用Build ...
- 当构造方法参数过多时使用builder模式
静态工厂和构造方法都有一个限制:它们不能很好地扩展到很多可选参数的情景.请考虑一个代表包装食品上的营养成分标签的例子.这些标签有几个必需的属性——每次建议的摄入量,每罐的份量和每份卡路里 ,以及超过 ...
随机推荐
- 提高PHP性能的一些小知识
自PHP面世起以其良好的跨平台性,高效的开发机制有WEB领域占有很大份额.因为它的运行机制是脚本解释运行执行后相关资源都会被回收,所以PHP开发人员很少关心他的资源占用所导致性能问题,但本人是个追求极 ...
- Django 初识
Django 初识 一.前言 Django是一款网站架构,能够快速的搭建一个网站.openstack的界面显示使用的就是Django的框架.所以,学习openstack多少要了解一些Django的内 ...
- scrapy_简介页面和详情页面
如何对提取的URL进行限定? 往上找id和class属性值,进行多次层级选择,进行内容限定 如何实现获取主页所有urls,然后交给scrapy下载后并解析详情页面,返回结果?(文章简介页面和文章详细页 ...
- vim 实用配置
修改文件~/.vimrc 如下: set nu " 显示行号colorscheme torte " 设定配色方案set tabstop=4 " 设定 tab 长度为 4s ...
- String.Format 格式化货币的小问题
今天在开发过程中,遇到一件让我觉得比较纳闷的事情:用String.Format 格式化充值金额的时候,我这样处理: String.Format("{0:C2}", dr[" ...
- Linux时间转标准时间
[root@nhserver2 ~]# date -d '1970-1-1 0:0:0 GMT + 1394592071 seconds'Wed Mar 12 10:41:11 CST 2014
- Eclipse 配置运行Spark
本文主要记录Spark 在 Eclipse中报 找不到主类的问题.在新建Spark工程,然后add external jars 选择 spark-assembly-1.4.0-hadoop2.6.0. ...
- 自动化测试KPI考评的一种方法
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6856204.html 众所周知,在IT ...
- wpf datagrid row height 行高自动计算使每行行高自适应文本
wpf 的datagrid的行高 要么是Auto,要么是定值:但会带来麻烦就是每行行高都一样. 当需要按内容(主要是wrap 换行的textbox或textblock)来动态调整行高的时候,需要用到d ...
- php动态编辑zlib扩展
linux系统上,在php已经编译安装的情况下,启用zlib扩展不是那么容易,需要动态编译 以下是编译步骤: cd ./ext/zlib mv config0.m4 config.m4 /usr/lo ...