设计模式并不使用独特的语言特性,也不采用那些神奇的编程技巧。全部的模式都可以用标准的面向对象语言实现,这也许会多费一些功夫,可是增长了软件的灵活性和可复用性。编程
书中根据模式的性质将模式划分为三类:建立型(creational)、结构型(structural)、行为型(behavioral)。 建立型模式与对象的建立有关;结构型模式处理类或对象的组合;行为型模式对类或对象怎样交互和怎样分配职责进行描述。设计模式
多态:对象接口与其功能实现是分离的,不一样对象能够对请求作不一样的实现,也就是说,两个有相同接口的对象能够有彻底不一样的实现。框架
在面向对象系统中,接口是基本的组成部分,对象只有经过它们的接口才能与外部交流,若是不经过对象的接口就没法知道对象的任何事情,也没法请求对象作任何事情。工具
理解对象的类和类型(抽象、具体、混入)之间的差异很是重要:一个对象的类定义了对象是怎样实现的,同时也定义了对象的内部状态和操做的实现。可是对象的类型只与它的接口有关,接口即对象能响应的请求的集合,一个对象能够有多个类型,不一样类也能够有相同的类型。设计
全部从抽象类导出的类将共享该抽象类的接口,这时,全部的子类都能相应抽象类中的请求。只根据抽象类中定义的接口来操做对象有如下两个好处: 1)客户无须知道他们使用对象的特定类型,只须对象有客户所指望的接口。 2)客户无须知道他们使用的对象是用什么类来实现的,他们只须知道定义接口的抽象类。 这样能够极大地减小系统实现之间的相互依赖,也产生了可复用的面相对象设计的以下原则: 针对接口编程,而不是针对实现编程。对象
混入类是给其余类提供可选择的接口或功能的类,它与抽象类同样不能实例化,都是用于继承的,抽象类和混入类都是对象的类型。继承
优先使用对象组合,而不是类继承。 由于当须要复用子类时,实现上的依赖性就会产生一些问题。若是继承下来的实现不适合解决新的问题,则父类必须重写或被其余更适合的类替换。这种依赖关系限制了灵活性并最终限制了复用性。优先使用对象组合有助于保持每一个类被封装,并被集中在单个任务上;基于对象组合的设计有更多的对象(而有较少的类),且系统的行为将依赖于对象间的关系而不是被定义在某个类中。接口
委托(在一个对象中引用另外一个对象,以此来完成请求)是对象组合的特例。它告诉你对象组合做为一个代码复用机制能够替代继承。io
设计问题对框架设计而言最具重要性。(相比应用和工具库)一个使用设计模式的框架比不使用设计模式的框架更可能得到高层次的设计复用和代码复用。成熟的框架一般使用了多种设计模式。了解设计模式的人能更快的洞悉框架。class