Vison's Blog
所有文章
文章总览
编辑器
Publications
About Me
Search
目录
#toc-container
下载Markdown文件
引言-设计模式 可复用面向对象软件的基础
2021年02月23日 20时51分
标签:
软件系统设计
设计模式
### 1.1 什么是设计模式? - 四个要素 - 模式名(pattern name) - 一个助记名 - 问题(problem) - 描述应该在何时使用模式 - 解决方案(solution) - 如何使用模式 - 效果(consequence) - 模式的应用效果 - 本书的设计模式是:对用来在特定场景下解决一般问题的类和相互通信的对象的描述 ### 1.2 Smalltalk MVC中的设计模式 - 类的模型/视图/控制器(Model/View/Controller)三元组 - 模型:应用对象 - 视图:它在屏幕上的表示 - 控制器:用户界面对用户输入的响应方式 - “订购/通知”协议 - 分离视图和模型 - 将对象分离,使得一个对象的改变能够影响另一些对象,而这个对象并不需要知道那些被影响的对象的细节 - Observer设计模式 - 嵌套视图 - 将一些对象划为一组,并将该组对象当做一个对象来使用 - Composite模式 - 在不改变视图外观的情况下改变视图对用户输入的响应方式 - View-Controller关系 - Strategy模式 ### 1.3 描述设计模式 - 统一的格式 - 模式名和分类 - 简洁地描述模式的本质 - 意图 - 设计模式是做什么的? - 它的基本原理和意图是什么? - 解决的是什么样的特定设计问题? - 别名 - 模式的其他名称 - 动机 - 说明一个设计问题 - 如何使用模式中的类和对象来解决该问题的特定情境 - 适用性 - 什么情况下可以使用 该设计模式? - 该设计模式可以用来改进哪些不良设计? - 怎样识别这些情况? - 结构 - 基于对象建模技术的表示法对模式中的类进行图形描述 - 参与者 - 设计模式中的类和/或对象 - 他们的职责 - 协作 - 参与者怎样协作以实现他们的职责 - 效果 - 模式怎样支持他的目标? - 使用模式的效果和所需做的权衡是什么? - 系统结构的哪些方面可以独立改变? - 实现 - 实现模式时需要知道的一些提示 - 技术要点、应避免的缺陷 - 是否存在于某些特定与实现语言的问题 - 代码示例 - C++/Smalltalk实现该模式的代码片段 - 已知应用 - 实际系统中发现的模式的例子 - 相关模式 - 与这个模式紧密相关的模式 - 和这些模式重要的不同之处 - 这个模式应与那些模式一起使用? ### 1.5组织编目 - 对模式进行分类 - 目的准则:模式是用来完成什么工作的 - 创建型(creational) - 和对象的创建有关 - 结构型(structural) - 处理类或对象的组合 - 行为型(behavioral) - 描述类或对象怎样交互和怎样分配职责 - 范围准则:指定模式主要是用于类还是对象 - 类模式 - 处理类和子类之间的关系 - 通过继承建立 - 静态的 - 在编译器确定 - 对象模式 - 处理对象之间的关系 - 在运行时变化 - 具有动态性 ### 1.6 设计模式怎样解决设计问题 - 寻找合适的对象 - 决定对象的粒度 - 指定对象接口 - 描述对象的实现 - 类继承与接口继承的比较 - 对象的类(class)和对象的类型(type)之间的差别 - 类定义了对象是怎样实现的,同时也定义了对象的内部状态和操作的实现 - 对象的类型只与它的接口有关 - 接口:能响应的请求的集合 - 一个对象可以有多个类型,不同类的对象也可有相同的类型 - 对接口编程,而不是对实现编程 - 运用复用机制 - 继承和组合的比较 - 类继承 - 根据其他类的实现来定义一个类的实现 - 白箱复用(white-box reuse) - 对象组合(object composition) - 通过组装或组合对象来获得 - 黑箱复用(black-box reuse) - 优先使用对象组合,而不是类继承 - 委托 - 参数化类型 - 关联运行时和编译时的结构 - 一个面向对象程序运行时的结构通常与它的代码结构相差很大 - 设计应支持变化 - 导致重新设计的一般原因 - 显式地指定一个类来创建对象 - 对特殊操作的依赖 - 对硬件和软件平台的依赖 - 对对象表示或实现的依赖 - 算法依赖 - 紧耦合 - 通过生成子类来扩充功能 - 不能方便地对类进行修改 ### 1.7 怎样选择设计模式 - 考虑设计模式是怎样解决设计问题的 - 浏览模式的意图部分 - 研究模式怎样互相关联 - 研究目的相似的模式 - 检查重新设计的原因 - 考虑你的设计中哪些是可变的 ### 1.8 怎样使用设计模式 - 大致浏览一遍模式 - 回头研究结构部分、参与者部分和协作部分 - 看代码示例部分,看看这个模式代码形式的具体例子 - 选择模式参与者的名字,使它们在应用上下文中有意义 - 定义类 - 定义模式中专用于应用的操作名称 - 实现执行模式中责任和协作的操作
所有评论
暂无评论
新增评论
评论
邮箱
邮箱仅作验证使用
图形验证码
邮箱验证码
发送验证码
发表评论
所有评论
暂无评论