effective java之 builder模式
在java开发中我们经常需要创建对象 ,我们常用的创建对象的方法有两种
1 使用构造器来创建对象 如果有多个可变参数 ,就需要写多个构造方法,这种方法在遇到多个参数时不好控制
2. javabean的写法,私有化成员变量, 私有构造方法 ,通过setter和getter来设置和获取值 ,这种构造的缺点是传入的参数不好检测,例如有些非空的数据等
3.静态工厂
现在我们介绍的builder模式创建的对象 适用于有多个可变参数和一定数量的限制参数的时候
贴代码
public class Student {private int id;private int classId;private int schoolId;private String name;private String className;private String schoolName;private String sex;private String age;public static class Builder {// 非空信息,限定值(必须填的)private int id;private int classId;private int schoolId;// 选择信息,可以不填的,不填默认为“未设定”private String name = "未设定";private String className = "未设定";private String schoolName = "未设定";private String sex = "未设定";private String age = "未设定";//builder构造方法 必须设置限定属性的值public Builder(int id, int classId, int schoolId) {this.id = id;this.classId = classId;this.schoolId = schoolId;}//外部提供的设置可选属性的值public Builder name(String name) {this.name = name;return this;}public Builder className(String className) {this.className = className;return this;}public Builder schoolName(String schoolName) {this.schoolName = schoolName;return this;}public Builder sex(String sex) {this.sex = sex;return this;}public Builder age(String age) {this.age = age;return this;}public Student build(){return new Student(this);}}//私有化构造方法 外部不能直接new studentprivate Student(Builder builder) {//通过赋值这种方法来检测传入的值得正确性 不正确会抛出异常this.id = builder.id;this.classId = builder.classId;this.schoolId = builder.schoolId;this.name = builder.name;this.className = builder.className;this.schoolName = builder.schoolName;this.age = builder.age;this.sex = builder.sex;}//提供访问对象各项属性数据的接口public int getId() {return id;}public int getClassId() {return classId;}public int getSchoolId() {return schoolId;}public String getName() {return name;}public String getClassName() {return className;}public String getSchoolName() {return schoolName;}public String getSex() {return sex;}public String getAge() {return age;}}
逻辑控制层
public class Controler {public static void main(String[] args) {Student student = new Student.Builder(2012, 10086, 13800).name("罗康").age("20").sex("男").build();System.out.println("名字:" + student.getName() + " - 学校名:" + student.getSchoolName()+ " - 性别:" + student.getSex());}
}
优点在于 编写简单 在对象域检测参数的合法性 传入参数方便 。我第一次见这种写法是在开发android软件时使用new AlertDialog.builder(Context context).setTitle(" ").create().show();
effective java之 builder模式相关推荐
- Java设计模式——Builder模式
前言 之前写Android程序的时候,经常会用到Dialog(对话框)这个控件.我们在使用Dialog,比如AlertDialog的时候就用到了这里要说明的Builder模式.现在我们来看一下这样的一 ...
- Effective Java~2.Builder代替多参数Constructor
Builder模式 // Builder Pattern public class NutritionFacts {private final int servingSize;private fina ...
- Java之Builder模式使用
之前用过听过builder设计模式,但自己的代码中从来没有应用过,只知道在做GUI开发时用到的控件,它们当中有些使用了builder设计模式.自己也不明白在什么场景下才应该使用. 先说说我遇到的实际情 ...
- Java之Builder模式
前言 Builder模式是一种一步一步创建一个复杂对象的设计模式,这种设计模式的精髓就主要有两点:其一,用户使用简单,并且可以在不需要知道内部构建细节的情况下,就可以构建出复杂的对象模型:其二,对于设 ...
- Java设计模式-Builder模式
Builder模式是将一个复杂对象的创建和表示分离,使同样的创建过程可以创建不同的表示.它属于建造类模式. 一般来说,如果一个对象的创建比较复杂,超出了构造方法所能包含的范围,就可以使用工厂模式和Bu ...
- Java 设计模式 --- Template 模式 Java Template 模式 Java 模板设计模式
Java 设计模式 --- Template 模式 Java Template 模式 Java 模板设计模式 一.概述 模板设计模式: 父类定义通用抽象的功能方法,子类负责具体的实现. 本文将以一个通 ...
- Effective Java:Builder模式
在Java中遇到多个参数时,有3种方式可以构造类. 一.重叠构造器(telescoping constructor)模式 这种模式下,在类中有多个使用不同参数的构造函数,需要什么参数,就写一个相应的构 ...
- effective java 3th item2:考虑 builder 模式,当构造器参数过多的时候
yiaz 读书笔记,翻译于 effective java 3th 英文版,可能有些地方有错误.欢迎指正. 静态工厂方法和构造器都有一个限制:当有许多参数的时候,它们不能很好的扩展. 比如试想下如下场景 ...
- java的设计模式 - Builder模式
Builder 模式的目的? 构造对象的方式过于复杂,不如将之抽离出来.比如,构造器参数过多 这样说也有点抽象,举个例子吧. 举个例子 比如 非常热门的消息队列RabbitMQ 的 AMQP.Basi ...
最新文章
- k8s核心组件详细介绍教程(配超详细实例演示)
- <文本,场景图>解析实践
- kibana操作elasticsearch:多字段查询(multi_match)
- java byte转换成string_Java byte []到/从String转换
- git@github.com: Permission denied (publickey).
- 学分绩点计算编程java_方便我们计算学分绩点的JavaScript
- 原神创意工坊工具箱2.0源码-小程序前端源码
- zend反编译-dezender 使用
- 对python生成的EXE文件 进行反编译
- 百度的71个炸天的开源项目
- 谷歌浏览器显示弹框登陆代理解决方法
- mariadb安装几个问题
- 手把手教你集成阿里云推送(app杀死仍可推送)
- 删除卸载企业微信后的残留文件
- 常见电子元器件的分类与识别
- 【python for finance】 Portfolio Optimization 投资组合优化
- 北京市金融工作局:大数据重塑未来金融监管方式
- win7计算机个性化,win7系统桌面右击不显示个性化选项的解决方法
- SOEM 源码解析 ecx_map_sii
- RecyclerView与ViewPager2