happyhippy

这个世界的问题在于聪明人充满疑惑,而傻子们坚信不疑。--罗素

随笔分类 -  OO&设计模式

Factory Method模式的误区:Factory Method模式是简化版的Abstract Factory吗?
摘要: FactoryMethod是一个相对比较简单的创建型模式,但是能领悟或者用对的并不多见;很多示例都没有反应出Factory Method的核心思想,只是实现了一个简化版的Abstract Factory,然后给出的解释是Factory Method模式解决“单个对象”的需求变化,Abstract Factory 模式解决“系列对象”的需求变化。 试想一下,如果把1视为N的一种特殊情况,则一个产品系列可能只包含一个对象;那么我们是不是可以认为Factory Method是一个简化版的Abstract Factory呢?实际上,Factory Method模式与Abstract Factory模式虽然同属于对象创建型模式,并且AbstractFactory类通常用Factory Method模式实现,并且效果上都可用于连接平行的类层次,但是这两个模式在思想上有着本质的区别。网上的文章抄来抄去,结果错误也被到处传。上一篇介绍了被普遍误用的Builder模式,这篇继续为Factory Method正名。 阅读全文
posted @ 2010-09-26 19:50 Silent Void 阅读(5952) 评论(10) 推荐(4) 编辑
Builder模式的误区:将复杂对象的构建进行封装,就是Builder模式了吗?
摘要:最近重读GOF的《设计模式》,读到Builder模式的时候,发现还是不能领悟;网上搜了下其他人的解释,发现很多人都用错了Builder模式,结构形似Builder,实际上却更像Template、或者Factory Method,或者四不像,并没有体现出Builder模式的思想和威力;通过对比学习,也逐渐加深了我对Builder模式的认识,于是就有了这篇文章。 阅读全文
posted @ 2010-09-01 00:12 Silent Void 阅读(18190) 评论(31) 推荐(4) 编辑
《Java与模式》- 行为型模式
摘要:Strategy Pattern, Template Method Pattern, Observer Pattern, MVC Pattern, Iterator Pattern, Chain of Responsibility Pattern, Command Pattern, Memento Pattern, State Pattern, Interpreter Pattern, Visitor Pattern, Mediator Pattern 阅读全文
posted @ 2007-06-22 09:47 Silent Void 阅读(449) 评论(0) 推荐(0) 编辑
《Java与模式》- 结构型模式
摘要:Adapter Pattern, Composite Pattern, Decorator Pattern, Flyweight Pattern, Facade Pattern, Brige Pattern 阅读全文
posted @ 2007-06-22 09:40 Silent Void 阅读(427) 评论(0) 推荐(0) 编辑
《Java与模式》- 创建型模式
摘要:Simple Factory Pattern, Factory Method Pattern, Abstract Factory Pattern, Singleton pattern, Mutition Pattern, Builder Pattern, Prototype Pattern 阅读全文
posted @ 2007-06-22 09:26 Silent Void 阅读(489) 评论(0) 推荐(0) 编辑
面向对象设计的原则
摘要: SRP,单一职责原则(The Single Responsibility Priciple);OCP,开放封闭原则(The Open-Close Priciple);LSP,Liskov替换原则(The Liskov Substitution Priciple);DIP,依赖倒置原则(The Dependency Inversion Priciple);ISP,接口隔离原则(The Interface Segregation Interface); REP,重用发布等价原则;CCP,共同封闭原则;CRP,共同重用原则; ADP,无环依赖原则;SDP,稳定依赖原则;SAP,稳定抽象原则 阅读全文
posted @ 2007-05-08 20:40 Silent Void 阅读(823) 评论(0) 推荐(0) 编辑
从“Liskov替换原则”和“Refused Bequest”看“正方形为什么不能继承长方形”
摘要:目前也有一些技术可以支持我们将合理假设明确化,例如测试驱动开发(Test-Driven Development,TDD)和基于契约设计(Design by Contract,DBC)。但是有谁知道设计的使用者会作出什么样的合理假设呢?大多数这样的假设都很难预料。如果我们预测所有的假设的话,我们设计的系统可能也会充满不必要的复杂性。PPP一书中推荐的做法是:只预测那些最明显的违反LSP的情况,而推迟对所有其他假设的预测,直到出现相关的脆弱性的臭味(Bad Smell)时,才去处理它们。我觉得这句话还不够直白,Martin Fowler的《Refactoring》一书中“Refused Bequest”(拒收的遗赠)描述的更详尽:子类继承父类的methods和data,但子类仅仅只需要父类的部分Methods或data,而不是全部methods和data;当这种情况出现时,就意味这我们的继承体系出现了问题。例如上面的Rectangle和Square,Square本身长和宽相等,几何学中用边长来表示边,而Rectangle长和宽之分,直观地看,Square已经Refused了Rectangl 阅读全文
posted @ 2007-05-06 12:58 Silent Void 阅读(2441) 评论(10) 推荐(2) 编辑
《OOD启思录》:61条面向对象设计的经验原则
摘要:“你不必严格遵守这些原则,违背它们也不会被处以宗教刑罚。但你应当把这些原则看成警铃,若违背了其中的一条,那么警铃就会响起。” ----- Arthur J.Riel 阅读全文
posted @ 2007-05-04 14:26 Silent Void 阅读(1129) 评论(1) 推荐(0) 编辑