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

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

ID:30852797

大小:74.96 KB

页数:7页

时间:2019-01-04

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

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

1、建造者模式实践-编程开发技术建造者模式实践木文由ImportNew・kingviker翻译自javacodegeekso欢迎加入翻译小组。转载请见文末要求。我不打算跳入设计模式的过多细节中,因为已经有一大堆的文章和书籍很详细的解释过了。所以我打算告诉你为什么和什么时候你应该考虑使用设计模式。然而,值得一提的是本文中的模式和四人帮的《DesignPatterns:ElementsofReusableObject-OrientedSoftware》一书中的提出的有点不一样。因为原生模式专注于抽象构建的步骤,所以通过使用不同的建造者的实现我们能得到不同的

2、结果,然而在本文中解释的设计模式是讨论如何移除源口丁•多构造函数,多可选参数和滥用的setters方法屮那些不必要的复杂的事物。publicclassUserfinalfinalfinalfinalfinalprivateprivateprivateprivateprivate假设你有一个包含大量属性的类,就像下面的User类一样。让我们假设你想让这个类不可变(顺便说一句,除非你有一个真正的好理由,让你不必总是向着不可变这个目标奋斗。我们会在另一篇文章中讨论它)。StringfirstName;//requiredStringlastName;//

3、requiredintage;//optionalStringphone;//optionalStringaddress;//optional现在想象一下,在你的类中右一些属性是必须的,冇一些是可选的。你会如何创建这个类的实例?所有的屈性都被声明成fineil类型,所以你必须在构造方法中设置它们,但是你也想让这个类的客户端冇忽略可选屈性的机会。一个首先想到的可选方案是有一个构造方法是只接收必须属性作为参数,一个是接收所有必须属性和第一个可选属性,再一个是接收两个可选属性等等。这看起來会是什么样的?看起来这样:StringlastName){0);p

4、ublicUser(StringfirstName,this(firstName,lastName,publicUser(StringfirstName,StringlastName,intage)this(firstName,lastName,age,");publicUser(StringfirstNeime,StringlastName,intage,Stringphone)this(firstName,lastName,age,phone,");publicUser(Stringf让stName,StringlastName,intage,

5、Stringphone,Stringaddress){this.firstNamc二firstNamc;this.lastName=lastName;this,age=age;this.phone二phone;this.address=address;}这种构造对象的方式的好处是它可以正常工作。然而,这种方式的问题也是显而易见的。当你只有儿个属性的时候不是什么大问题,但是随着属性个数的增加,代码变的越来越难阅读和维护。更重要的是,对客户端来说代码变得越来越难使用。客户端里我该调用那一个构造方法?有两个参数那个?三个参数那个?我没有显示传值的那些参数

6、的默认值都是什么?如何我只想给address属性设置一个值,但是不想给age和phone设置该怎么办?这种情况下,我不得不调用能接收所有参数的构造方法并传递默认值给那些我不关心的可选参数。另外,一些参数有相同的类型很容易混淆。第一个String类型参数对应的是phone还是address?因此我们冇什么其他选择来应对这种场景?我们可以总是遵循JavaBeans惯例,有一个默认的无参构造方法并口毎个属性都有getter和setter方法。就彖这样:publicclassUser{privateStringfirstNamc;//requiredpri

7、vateStringlastName;//requiredprivateintage;//optionalprivateStringphone;//optionalprivateStringaddress;//optionalpublicStringgetFirstName(){returnfirstName;}publicvoidsetFirstName(StringfirstName){this・firstNanic=firstNamc;publicStringgetLastName(){returnlastName;}publicvoidse

8、tLastName(StringlastName){this.lastMeinic二lastName;}publicint

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

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

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