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
阅读(5965)
推荐(4) 编辑
Builder模式的误区:将复杂对象的构建进行封装,就是Builder模式了吗?
摘要:最近重读GOF的《设计模式》,读到Builder模式的时候,发现还是不能领悟;网上搜了下其他人的解释,发现很多人都用错了Builder模式,结构形似Builder,实际上却更像Template、或者Factory Method,或者四不像,并没有体现出Builder模式的思想和威力;通过对比学习,也逐渐加深了我对Builder模式的认识,于是就有了这篇文章。
阅读全文
posted @
2010-09-01 00:12
Silent Void
阅读(18227)
推荐(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
阅读(451)
推荐(0) 编辑
《Java与模式》- 结构型模式
摘要:Adapter Pattern,
Composite Pattern,
Decorator Pattern,
Flyweight Pattern,
Facade Pattern,
Brige Pattern
阅读全文
posted @
2007-06-22 09:40
Silent Void
阅读(431)
推荐(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
阅读(491)
推荐(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
阅读(834)
推荐(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
阅读(2466)
推荐(2) 编辑
《OOD启思录》:61条面向对象设计的经验原则
摘要:“你不必严格遵守这些原则,违背它们也不会被处以宗教刑罚。但你应当把这些原则看成警铃,若违背了其中的一条,那么警铃就会响起。” ----- Arthur J.Riel
阅读全文
posted @
2007-05-04 14:26
Silent Void
阅读(1136)
推荐(0) 编辑