建造者(Builder)模式
1. 絮絮叨叨
- 一说到如何新建一个对象,熟悉面向对象编程的同学,首先想到的就是
new
一个对象 - 笔者在研究生期间,甚至听到过同学院的男同学这样调侃过找对象的事情:
找对象太难了,僧多粥少,还可能找到个自己不满意的。要是能new一个“对象”多好啊,外貌、性格啥的都是自定义,保证满足要求。要是不满足要求,还能重新set一下属性
- 当时笔者和朋友走在这几个男生的后面,顿时不厚道地大笑出声,虽然我也是单身狗,但这不妨碍我笑啊
1.1 通过构造函数创建对象
创建对象,首先想到的就是通过构造函数创建对象,也就是new一个对象,并在new的时候传入初始值
考虑具有5个属性的User类,其中name、telephone、sex都是必填字段,否则无法录入信息系统
public class User {private String name; // 必填字段private String telephone; // 必填字段private String sex; // 必填字段private int age; // 可选字段private String address; // 可选字段 }
对于可选字段,我们可以初始化这些字段中任意个,也可以不初始化
这时,我们需要有多个构造函数,以创建具有不同状态的user对象
伸缩构造函数问题
- 构造函数个数指数级增长
- 想想在User类中,2个可选字段的存在,就搞得我们需要构建4个构造函数
- 如果有 n n n个可选字段的存在,就需要 2 n 2^n 2n个构造函数
- 构造函数的参数难以对应,容易传参错误
- 构造函数中的参数一旦变多,到底哪个属性对应哪个参数,需要人工确认
- 同时,还相邻的参数还可能类型相同,这就更加容易传错了
- 遇到这样的问题,debug将变得非常困难。因为有些字段的内容可能没有明确的含义,如数值字段,很难判断哪个位置传参了错误
- 那种感觉之酸爽,真的只有经历过的人才知道
建造者(Builder)模式相关推荐
- 设计模式学习笔记——建造者(Builder)模式
设计模式学习笔记--建造者(Builder)模式 @(设计模式)[设计模式, 建造者模式, builder] 设计模式学习笔记建造者Builder模式 基本介绍 建造者案例 类图 实现代码 Build ...
- 设计模式--建造者(Builder)模式
模式定义 将一个复杂对象的创建与他的表示分离,使得同样的构建过程可以创建不同的表示 类图 应用场景 1.需要生成的对象具有复杂的内部结构: 2.需要生成的对象内部属性本身相互依赖: 3.与不可变对象配 ...
- 设计模式C++描述----07.建造者(Builder)模式
一. 概述 Builder 模式要解决的问题是:当我们要创建的对象很复杂的时候(通常是由很多其他的对象组合而成),我们要要复杂对象的创建过程和这个对象的表示(展示)分离开来,这样做的好处就是通过一步步 ...
- 利用建造者(Builder)模式构建 Java 对象
简介: 一般我们构建对象有两种方法,一是构造器,二是默认无参构造器创建对象后使用 set 方法一个个赋值.第一种方法我们需要写一个全参的构造方法,但这样我们在构造对象时有一些不需要填写的对象也要给他赋 ...
- Java设计模式之建造者Builder模式代码示例
- 设计模式——生成器(建造者)模式
1. 简介 建造者(Builder)模式又称 生成器模式,属于创建型模式.在软件的设计中,我们可能经常会遇到需要构建某个复杂的对象(比如在游戏开发中,进行人物角色的构建),建造该对象的"过程 ...
- Builder (建造者)模式
7.1 Builder 模式 在建造大楼时,需要先打牢地基,搭建框架,然后自下而上地一层层盖起来.通常,在建造这种具有复杂结构的物体时,很难一气呵成.我们需要首先建造组成这个物体的各个部分,然后分 ...
- (一)Builder(建造者)模式
我们一般在构建javabean的对象的时候通常有三种写法: 1.直接通过构造函数传参的方式设置属性,这种方法如果属性过多的话会让构造函数十分臃肿,而且不能灵活的选择只设置某些参数. 2.采用重叠构造区 ...
- Java静态类 Builder(建造者)模式
在Java世界里,经常被提到静态这个概念,static作为静态成员变量和成员函数的修饰符,意味着它为该类的所有实例所共享,也就是说当某个类的实例修改了该静态成员变量,其修改值为该类的其它所有实例所见. ...
- Creational模式之Builder模式
1.意图 将一个复杂对象的构建与它表示分离,使得相同的构建过程能够创建不同的表示. 查看很多其它请点击 2.别名 无 3.动机 一个RTF(Rich Text Format)文档交换格式的阅读器应能将 ...
最新文章
- 28岁女博士生被骂“学术媛”,只因在网上分享自己牛津年级第一成绩毕业......
- vue删除数组中的一条数据_删除排序数组中的重复项 II
- 【今日CS 视觉论文速览】Mon, 7 Jan 2019
- 词根 sent/sens
- 一家独大的亚马逊,让人恐慌?
- struts2 拦截器_Struts 2拦截器示例
- http 协议入门
- 备份 dup linux,13个开源备份解决方案盘点
- 书城项目 软件可行性分析报告
- 这就是我不建议去外包公司开发的原因?
- ​LeetCode刷题实战196:删除重复的电子邮箱
- uniapp路由守卫
- 北大元培学院数学与计算机,通识教育试验的尴尬 北京大学元培学院近距离观察...
- android为什么会用流量,手机流量为什么会偷跑?
- css 如何实现文本竖排、横排展示
- 无法进入网页版小木虫
- Raspberry Pi 支持开源脑机接口
- 用户登录撞库与bean作用域问题
- python爬虫练习网站,墙裂安利这个可以练习爬虫的网站
- “远古帝国2”的片头图片抖动代码
热门文章
- 设计模式学习笔记——建造者(Builder)模式