业务需求:

创建一个不可变的Person对象,这个Person可以拥有以下几个属性:名字、性别、年龄、职业、车、鞋子、衣服、钱、房子。

要求:

其中名字和性别是必填项,而其他选填项可以根据情况自由输入。

具体实现:

1.为了保证对象的不可变,我们要将Person类中的每一个属性都声明为private final的。

2.在Person类中定义一个内部类Builder。

(1)这个Builder内部类中的属性要和Person中的相同,并且必须有的属性(名字和性别)要用final修饰,防止这些属性没有被赋值。

(2)其中必填项使用Builder的构造方法接收值,选填项使用返回值为Builder的方法接收值。

(3)最后定义了一个build方法,将Builder对象传入Person的私有构造方法,最终返回一个Person对象。

3.Person的私有构造方法的写法:不直接传入属性,而是传入一个Builder对象。

方法调用:

必填项使用Builder构造方法传入,非必须的属性可以根据需要任意设置。

 

转载于  Java 大白话讲解设计模式之 -- 建造者(Builder)模式

最新文章

  1. NO.3 CAS配置问题汇总
  2. 。。。珍惜生命,远离Eclipse。。。
  3. python windows终端窗口下输出编码错误
  4. delphi 调用c#dll
  5. mybatis insert 如何返回主键
  6. C# 中的枚举类型 enum (属于值类型)
  7. (简单) POJ 3468 A Simple Problem with Integers , 线段树+区间更新。
  8. web服务的三大主流架构
  9. Python生成器主要用法
  10. AVStream ddk 翻译
  11. Asp.net MVC 权限过滤器实现方法的最佳实践
  12. topcoder srm 615 div1
  13. MVC Action 返回类型
  14. Linux日志痕迹清除
  15. Go语言从入门到放弃(一) 变量/常量/函数
  16. Lucas卢卡斯定理
  17. 洛谷P3193 [HNOI2008]GT考试 kmp+dp
  18. tkinter简单打开网址 + 执行系统命令
  19. 20170831工作日记--自定义View学习
  20. spring 默认情况下事务是惟一的 同一个方法里面第一个sql开启后 在执行完 将事务传递给下一个sql

热门文章

  1. Omnisharp VsCode Attaching to remote processes
  2. PTA的Python练习题(三)
  3. GO 回调实现
  4. EOS主网搭建教程--&&--搭建节点--&&--搭建mongodb数据库
  5. centos7一步一步搭建docker nginx 及重点讲解
  6. SRS源码—— Thread笔记
  7. 问题解决 : org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):
  8. Django学习 之 HTTP与WEB为Django做准备
  9. 【JAVA蓝桥杯】基础练习2 十六进制转十进制
  10. 利用Python进行数据分析笔记-时间序列(时区、周期、频率)