看Jersey文档中的OAuth1Parameters,这个类使用了builder模式,于是找出四人帮的《设计模式》一书温习一下builder模式。
==============================
builder模式的适用场景:
1. 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
2. 当构造过程必须允许被构造的对象有不同的表示时。
==============================
builder模式的效果:
1. 它使你可以改变一个产品的内部表示
2. 它将构造代码和表示代码分开
3. 它使你可对构造过程进行更精细的控制
==============================
实现中的考虑:
1. builder类的接口足够普遍以便为各种类型的builder构造产品
2. 产品没有抽象类 - 具体builder类生成的产品,通常它们的表示差别很大。差别太大的情况下,给产品定义公共接口没有多大的意义。
针对这一点,我觉得如果差异性没有那么大,给产品提供一个抽象基类或接口也是很好的。比如我在项目中做的文件格式转换,一些3D格式虽然各有不同但是还是有足够的共性,例如mesh, cs, materials,animation等是可以抽取的。
3. C++实现Builder类时,方法的缺省实现为空。这样做主要是为了方便 - 具体的builder类只需要实现感兴趣的方法。
其实从去年下半年开始就想将基本经典的书籍重新读一遍,可是一直未能如愿。完整地读《设计模式》应该是在10年前了,那个时候很傻很天真,书中的东西只懂了皮毛记住了几个模式的名称。深入理解尚不可及,何论融会贯通?近几年大部分时间都被微博微信碎片化,看的东西很零碎很肤浅,能够在心里留下痕迹的很少。从六月份开始,下定决心每天读书做记录,管理好自己的读书时间。
原文地址:http://blog.csdn.net/idisposable/article/details/46410405