设计模式
设计模式内容简介
这本书结合设计实作例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。书中分类描述了一组设计良好、表达清楚的软件设计模式,这些模式在实用环境下特别有用。此书适合大学计算机专业的学生、研究生及相关人员参考。书中涉及的设计模式并不描述新的或未经证实的设计,只收录了那些在不同系统中多次使用过的成功设计。
热门摘录
将系统分解成对象集合。因为要考虑许多因素:封装、粒度、依赖关系、灵活性、性能、演化、复用等等,它们都影响着系统的分解,并且这些因素通常还是互相冲突的。
类型(type) 是用来标识特定接口的一个名字。
动态绑定是指发送的请求直到运行时刻才受你的具体的实现的约束。
进一步讲,动态绑定允许你在运行时刻彼此替换有相同接口的对象。这种可替换性就称为多态(polymorphism),它是面向对象系统中的核心概念之一。
抽象类(abstract class)(与之对应的还有非抽象类称为具体类(concrete class)。)的主要目的是为它的子类定义公共接口。一个抽象类将把它的部分或全部操作的实现延迟到子类中,因此,一个抽象类不能被实例化。
子类能够改进和重新定义它们父类的操作。更具体地说,类能够重定义(override)父类定义的操作,重定义使得子类能接管父类对请求的处理操作。
混入类(mixin class)是给其他类提供可选择的接口或功能的类。它与抽象类一样不能实例化。混入类要求多继承
一个对象可以有许多类型,并且不同的对象可以共享同一个类型。
对象的某部分接口可以用某个类型来刻画,另一部分接口由其他的类型来刻画
Program to an interface, not an implementation Don't declare variables to be instances of particular concrete classes. Instead, commit only to an interface defined by an abstract class
This dependency limits flexibility and ultimately reusability. One cure for this is to inherit only from abstract classes, since they usually provide little or no implementation.
Favor object composition over class inheritance
Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request. Chain the receivingobjects and pass the request along the chain until an object handles it.
关于Builder的协作过程: 1、客户创建Director对象,并用它所想要的Builder对象进行配置。 2、一旦产品部件被生成,导向器就会通知生成器。 3、生成器处理导向器的请求,并将部件添加到该产品中。 4、客户从生成器中检索产品。
Director notifies the builder whenever a part of the product should be built.
C++中的工厂方法都是虚函数并且常常是纯虚函数。一定要注意在Creator的构造器中不要调用工厂方法——在ConcreteCreator中该工厂方法还不可用。
Factory methods in C++ are always virtual functions and are often pure virtual. Just be careful not to call factory methods in the Creator's constructor—the factory method in the ConcreteCreator won't be available yet.
Builder在最后的一步返回产品,而对于Abstract Factory来说,产品是立即返回的。
设计模式书评
还没人写过点评,快来抢沙发吧