《设计模式》随记

1,049 浏览发布于 作者 zouyang (欢迎转载-请注明出处链接)留下评论分享按钮

1、引言:
曾经多少次有过这种感觉—已经解决过了一个问题但就是不能确切知道是在什么地方或怎么解决的?如果能记起以前问题的细节和怎么解决它的,就可以复用以前的经验而不需要重新发现它。然而,我们并没有很好记录下可供他人使用的软件设计经验。
小说家和剧本作家很少从头开始设计剧情。他们总是沿袭一些业已存在的模式,像“悲剧性英雄”模式 (《麦克白》、《哈姆雷特》等 )或“浪漫小说”模式(存在着无数浪漫小说 )。同样地,面向对象设计员也沿袭一些模式,像“用对象表示状态”和“修饰对象以便于你能容易地添加 /删除属性”等。一旦懂得了模式,许多设计决策自然而然就产生了。

2、什么是设计模式

“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动” from Christopher Alexander

wikipedia也给出了解释:

设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。设计模式并不直接用来完成代码的编写,而是描述在各种不同情况下,要怎么解决问题的一种方案。

总结一下:简言之,一种问题解决方案的称呼。更直接了当的核心思想,就是:找出程序中变化的地方,然后把变化封装起来。(本书大多数内容都放在了如何封装变化上面,这跟编写可复用的面向对象程序是相符的,当我们把变化的部分都封装好后,剩下的就是可复用的稳定部分了)

3、模式分类:

  • 1)根据目的来划分,即模式是用来完成什么工作的。模式依据其目的可分为 创建型结构型、或 行为型三种。创建型模式与对象的创建有关;结构型模式处理类或对象的组合;行为型模式对类或对象怎样交互和怎样分配职责进行描述。
  • 2)根据范围来划分,即模式是用于还是用于对象的。类模式处理类和子类之间的关系,这些关系通过继承建立,是静态的,在编译时刻便确定下来了。对象模式处理对象间的关系,这些关系在运行时刻是可以变化的,更具动态性。

本书涉及模式,按照上面的分类分为了:

设计模式使人们可以更加简单方便地复用成功的设计和体系结构。(具体设计应用详见各章节,你将看到编程中常使用的各类模式,比如ADAPTER适配器、ITERATOR迭代器等等)

4、本书涉及概念汇总:

  • 面向对象程序组成:由对象组成。
  • 对象:包括数据和对数据进行操作的过程,过程通常称为方法或操作。也就是一个封装了数据及作用于这些数据的操作的运行实体。
  • 型构:对象声明的每一个操作(方法)指定名称、作为参数的对象和返回值。
  • 接口:对象操作所定义的所有操作型构的集合被称为该对象的接口。
  • 类型: 是用来标识特定接口的一个名字。如果一个对象接受“Wi n d o w”接口所定义的所有操作请求,那么我们就说该对象具有“Wi n d o w”类型。
  • 子类型与超类型:
    接口可以包含其他接口作为子集。当一个类型的接口包含另一个类型的接口时,我们就说它是另一个类型的子类型(subtype),另一个类型称之为它的超类型( supertype )
  • 动态绑定(dynamic binding):
    当给对象发送请求时,所引起的具体操作既与请求本身有关又与接受对象有关。支持相同请求的不同对象可能对请求激发的操作有不同的实现。发送给对象的请求和它的相应操作在运行时刻的连接就称之为动态绑定(dynamic binding)
  • 对象的实现是由它的类决定的,类指定了对象的内部数据和表示,也定义了对象所能完成的操作;
  • 对象通过实例化类来创建,此对象被称为该类的实例。当实例化类时,要给对象的内部数据(由实例变量 组成)分配存储空间,并将操作与这些数据联系起来。对象的许多类似实例是由实例化同一个类来创建的。
  • 抽象类(abstract class):主要目的是为它的子类定义公共接口。一个抽象类将把它的部分或全部操作的实现延迟到子类中,因此,一个抽象类不能被实例化。在抽象类中定义却没有实现的操作被称为抽象操作(abstract operation)。非抽象类称为具体类(concrete class)。
  • 框架(framework) :一组相互协作的类,形成某类软件的一个可复用设计。框架将设计划分为一组抽象类,并定义它们各自的责任及相互之间的合作,以此来指导体系结构级的设计。开发者通过继承框架中的类和组合其实例来定制该框架以生成特定的应用。
  • 抽象耦合:若类A维护一个指向抽象类 B的引用,则称类A抽象耦合于B。我们之所以称之为抽象耦合乃是因为 A指向的是一个对象的类型 ,而不是一个具体对象。
  • 黑箱复用(black-box reuse) 一种基于对象组合的复用方式。这些被组合的对象之间并不开放各自的内部细节,因此被比作“黑箱”。
  • 白箱复用(white-box reuse) 一种基于类继承的复用。子类复用父类的接口和实现,但它也可能存取其父类的其他私有部分。
  • 委托:一种实现机制,即一个对象把发给它的请求转发 /委托给另一个对象。而受托对象将代表原对象执行请求的操作。
  • 继承:两个实体间的一种关系,其中一实体乃是基于另一实体而定义的。
  • 接口:一个对象所有操作定义的型构的集合。接口刻划了一个对象可响应的请求的集合。
  • 对象引用:用于标识另一对象的一个值。
  • 子类:继承了另一个类的类。在 C + +中,子类又称为派生类(derived class)。
  • 类型:一个特定接口的名称。

5、感想:本书属于抛砖引玉那种类型,有兴趣可以再针对感兴趣的点,去深入了解。

想要打赏,请点击这里

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注