在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模式相关推荐

  1. Java设计模式——Builder模式

    前言 之前写Android程序的时候,经常会用到Dialog(对话框)这个控件.我们在使用Dialog,比如AlertDialog的时候就用到了这里要说明的Builder模式.现在我们来看一下这样的一 ...

  2. Effective Java~2.Builder代替多参数Constructor

    Builder模式 // Builder Pattern public class NutritionFacts {private final int servingSize;private fina ...

  3. Java之Builder模式使用

    之前用过听过builder设计模式,但自己的代码中从来没有应用过,只知道在做GUI开发时用到的控件,它们当中有些使用了builder设计模式.自己也不明白在什么场景下才应该使用. 先说说我遇到的实际情 ...

  4. Java之Builder模式

    前言 Builder模式是一种一步一步创建一个复杂对象的设计模式,这种设计模式的精髓就主要有两点:其一,用户使用简单,并且可以在不需要知道内部构建细节的情况下,就可以构建出复杂的对象模型:其二,对于设 ...

  5. Java设计模式-Builder模式

    Builder模式是将一个复杂对象的创建和表示分离,使同样的创建过程可以创建不同的表示.它属于建造类模式. 一般来说,如果一个对象的创建比较复杂,超出了构造方法所能包含的范围,就可以使用工厂模式和Bu ...

  6. Java 设计模式 --- Template 模式 Java Template 模式 Java 模板设计模式

    Java 设计模式 --- Template 模式 Java Template 模式 Java 模板设计模式 一.概述 模板设计模式: 父类定义通用抽象的功能方法,子类负责具体的实现. 本文将以一个通 ...

  7. Effective Java:Builder模式

    在Java中遇到多个参数时,有3种方式可以构造类. 一.重叠构造器(telescoping constructor)模式 这种模式下,在类中有多个使用不同参数的构造函数,需要什么参数,就写一个相应的构 ...

  8. effective java 3th item2:考虑 builder 模式,当构造器参数过多的时候

    yiaz 读书笔记,翻译于 effective java 3th 英文版,可能有些地方有错误.欢迎指正. 静态工厂方法和构造器都有一个限制:当有许多参数的时候,它们不能很好的扩展. 比如试想下如下场景 ...

  9. java的设计模式 - Builder模式

    Builder 模式的目的? 构造对象的方式过于复杂,不如将之抽离出来.比如,构造器参数过多 这样说也有点抽象,举个例子吧. 举个例子 比如 非常热门的消息队列RabbitMQ 的 AMQP.Basi ...

最新文章

  1. k8s核心组件详细介绍教程(配超详细实例演示)
  2. <文本,场景图>解析实践
  3. kibana操作elasticsearch:多字段查询(multi_match)
  4. java byte转换成string_Java byte []到/从String转换
  5. git@github.com: Permission denied (publickey).
  6. 学分绩点计算编程java_方便我们计算学分绩点的JavaScript
  7. 原神创意工坊工具箱2.0源码-小程序前端源码
  8. zend反编译-dezender 使用
  9. 对python生成的EXE文件 进行反编译
  10. 百度的71个炸天的开源项目
  11. 谷歌浏览器显示弹框登陆代理解决方法
  12. mariadb安装几个问题
  13. 手把手教你集成阿里云推送(app杀死仍可推送)
  14. 删除卸载企业微信后的残留文件
  15. 常见电子元器件的分类与识别
  16. 【python for finance】 Portfolio Optimization 投资组合优化
  17. 北京市金融工作局:大数据重塑未来金融监管方式
  18. win7计算机个性化,win7系统桌面右击不显示个性化选项的解决方法
  19. SOEM 源码解析 ecx_map_sii
  20. RecyclerView与ViewPager2

热门文章

  1. 计算机启动一下就停机,电脑启动一下就停了怎么办_电脑启动一下就停了是什么原因-win7之家...
  2. 前美团COO干嘉伟:好的管理,打得、骂得,又哄得
  3. 解决系统中没有ASPNET用户的烦恼
  4. 0318复利计算器4.0
  5. java.net.Url类的应用
  6. JavaScript加密/解密与OpenAI的对接:生成加密对话的ChatGPT 4.0应用
  7. 使用GORM操作数据库
  8. java操作excel的工具
  9. How MonoRail works
  10. Simulink学习笔记