构造模式实践-java开发java经验技巧

构造模式实践-java开发java经验技巧

ID:30851263

大小:74.75 KB

页数:8页

时间:2019-01-03

构造模式实践-java开发java经验技巧_第1页
构造模式实践-java开发java经验技巧_第2页
构造模式实践-java开发java经验技巧_第3页
构造模式实践-java开发java经验技巧_第4页
构造模式实践-java开发java经验技巧_第5页
资源描述:

《构造模式实践-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、构造模式实践-编程开发技术构造模式实践木文由ImportNew・孟冰川翻译自jlordialeso欢迎加入翻译小组。转载请见文末要求。这是我第一篇文章(也是我关于这个主题的第一篇博客)。我记不清在哪读过这项内容(尽管我基本上确认是在PracticesofanAgileDeveloperJt看到的),但是写博客应该能帮助你金神贯注。具体点来说,通过花些时间来解释你所知道的东西,你能更好的理解它。这也正是我想耍努力去做的,通过解释一件事,继而进一步理解这件事。并且还有个额外的好处,当我冋忆曾经做过的事情时,它是一个很好的集中地。希望在这过程

2、小也能帮助到你们。废话不多,让我们直奔主题——构造模式。我不打算分割成许多细节来讲,因为已经有非常多的稿件,书籍详细的说明过这个模式。反而,我会告诉你为什么,以及什么吋候应该考虑使用它。然而,值得一提的是,这里所说的模式和四人帮书中的模式冇些不同。尽管原始的模式聚焦于抽象出构建的步骤,这样通过改变建造者的实现就可以得到不同的结果,本篇所说的模式着眼丁从多构造器,多可选参数以及过度使用的setter中移除不必要的复杂性。想彖下你有一个类,像下图所示有许多属性。假设你想让你的类不可变(顺便说一下,除非有一个好的理由不这样做,否则你应该坚持。

3、但是我们会以另--种方式來达到要求。)publicclassUser{privatefinalStringfirstName;//requiredprivatefinalStringlastName;//requiredprivatefinalintage;//optionalprivatefinalStringphone;//optional//optionalprivatefinalStringaddress;现在,想象下你的类中冇些属性是必须的,冇些则是可选的。你将要如何创建你的对象?所冇的属性都声明为final,所以你必须在构造

4、器中给它们全部赋值,但是你也想给这个类的客户端忽略可选展性的机会。第一个可行的选择是拥冇一个只接受必要屈性作为参数的构造器,还要一个构造器接受所有的必要属性以及第一个可选属性,再有一个构造器接受两个可选属性等等。它是什么样子呢?像下面这个样子:publicUser(StringfirstName,StringlastName)this(firstName,lastName,0);publicUser(StringfirstName,StringlastName,intage){this(firstName,lastName,age,〃“

5、);}publicUser(StringfirstName,StringlastName,intage,Stringphone){this(firstName,lastName,age,phone,〃“);}publicUser(StringfirstName,StringlastName,intage,Stringphone,Stringaddress){this.firstName二firstName;this.lastName=lastName;this.age二age;this,phone=phone;this,address=

6、address;}这种方式來构建类的实例的好处是它能很好的工作。然而,这种方式的问题也很明显。当你只有几个属性时还好,但是当这个数字扩大时,代码就变的难以理解和维护了。更重要的是,代码对客户端来说变的很难。客户端应该调用哪个构造器?有两个参数的?有三个参数的?那些不用传确切值的参数的默认值是多少?如果我想给地址赋值,但是不给age和phone赋值要怎么办?那种情况下,我就不得不调用接受所有参数的构造器,并且给那些不需要的传入不在乎的默认值。此外,几个类型相同的参数是很令人费解的。第一个String是电话述是地址?那么在这些情况下,我们还

7、有其他选择吗?我们可以依照JavaBeans的约定,一个无参构造并且每个参数提供-个get和set。类似下面这个:publicclassUser{privateStringfirstName;//requiredprivateStringlastName;//requiredprivateintage;//optionalprivateStringphone;//optionalprivateStringaddress;//optionalpublicStringgetFirstName(){returnfirstName;}publi

8、cvoidsetFirstName(StringfirstName){this.firstName二firstName;publicStringgetLastName(){returnlastName;}p

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。