摘要: 去除代码中的if(obj==null),或者try/catch语句.维持Code的一致性.Null对象,代表"什么也不做"的一个对象.使Null对象称为一个匿名内部类确保了该类只有单一实例.并且客户无法创建Null对象的其他实例.可以使用if(obj== Employee.Null)表达.[Agile Software Development(Principles,Patterns,and Pracitices)] 阅读全文
posted @ 2013-12-10 17:32 robynhan 阅读(165) 评论(0) 推荐(0) 编辑
摘要: 类和实例对于大多数的类,都可以创建多个实例.在需要和不需要时,创建和删除这些实例.该过程会伴随着内存的分配和归还.同时,有一些类,应该仅有一个实例.该实例在程序启动/结束时被创建和删除.root对象.通过该对象可以得到系统中的其他对象.factory对象.用来创建系统中的其他对象.manager对象.负责管理和控制其他对象.对于这些对象,如果创建了多份,那么就会发生逻辑错误.通常情况下,强制对象单一性的机制有些多余.完全可以在程序启动时只创建该对象的一个实例.不过,使用模式能够传达我们的意图(该类仅能有一个实例).代价/收益:如果强制对象单一性的机制是轻量级的.那么传达意图的收益会胜过实施这些 阅读全文
posted @ 2013-12-10 17:07 robynhan 阅读(413) 评论(0) 推荐(0) 编辑
摘要: 相同的目的:把某种策略施加到另一组对象上.Facade从上面施加策略.其使用是明显且受限的.当策略涉及范围广泛并且可见时.约定的关注点.都同意使用Facade而不是隐藏于其下的对象.Mediator从下面施加策略.其使用不明显且不受限.当策略隐蔽且有针对性时.Mediator对用户是隐藏的.其策略是既成事实而不是一项约定.Facade模式Mediator模式[Agile Software Development(Principles,Patterns,and Pracitices)] 阅读全文
posted @ 2013-12-10 11:05 robynhan 阅读(220) 评论(0) 推荐(0) 编辑
摘要: 继承program by difference.通过继承,可以建立完整的软件结构分层.其中每一层都可以重用该层次以上的Code.过度使用继承的代价是巨大的.应使用组合或者委托来替代继承.Template Method(使用继承)和Strategy(使用委托)模式解决了相同的问题:分离通用的算法和具体的上下文(DIP).Template Method模式.Strategy模式Template Method模式允许一个通用算法操纵多个可能的具体实现.而完全遵循DIP的Strategy模式,允许每一个具体实现都可以被多个不同的通用算法操纵.总结.两者都用来分离高层算法和底层的具体实现.都允许高层算法 阅读全文
posted @ 2013-12-10 10:14 robynhan 阅读(187) 评论(0) 推荐(0) 编辑