• 第二章 实例研究:设计一个文档编辑器

    • 遇到的问题
    • 文档结构
      • 递归组合
  • 总结

第二章 实例研究:设计一个文档编辑器

目标:设计一个名为 Lexi 的“所见即所得”的文档编辑器。

遇到的问题

文档结构,格式化,修饰用户界面,支持多种视感标准,支持多种窗口系统,用户操作,拼写检查和连字符。

下面针对上述的7个问题,利用一个或多个设计模式,逐一解决。

文档结构

内部应支持如下几点:
1. 支持文档的物理结构。即将文本和图形安排到行、列、表等。
2. 可视化生成和显示文档
3. 根据显示位置来映射文档内部表示的元素。

此外,应该:
1. 一致对待文本和图形。
2. 一致对待简单元素和元素组。(这样可以允许任意复杂的文档)
(检查拼写错误和确定连字符时,还会需要这个问题)

递归组合

总结

在 Lexi 的设计中使用了8中不同的模式:
1. Composite 表示文档的物理结构
2. Strategy 运行不同的格式化算法
3. Decorator 修饰用户界面
4. Abstract Factory 支持多视感标准
5. Bridge 逊于多个窗口平台
6. Command 支持撤销用户操作
7. Iterator 访问和遍历对象结构
8. Visitor 允许无限扩充分析能力而又不会使文档结构的实现复杂化

2018-05-04 《设计模式:可复用面向对象软件的基础》- 实例研究相关推荐

  1. 设计模式:可复用面向对象软件的基础

    文章目录 设计模式 设计模式有4个基本要素 23个设计模式 设计模式分类 目的准则 范围准则 导致重新设计的一般原因,以及解决这些问题的设计模式举例 设计模式所支持的设计的可变方面 设计模式背后的6大 ...

  2. 设计模式-可复用面向对象软件的基础(第二章 实例研究)-阅读笔记

    目录 第二章 实例研究:设计一个文档编辑器 2.1 设计问题 2.2 文档结构 2.3 格式化 2.4 修饰用户界面 2.5 支持多种观感标准 2.6 支持多种窗口系统 2.7 用户操作 2.8 拼写 ...

  3. 设计模式-可复用面向对象软件的基础

    文章目录 1.什么是设计模式? 2.描述设计模式 3.设计模式怎样解决设计问题? 描述对象的实现 4.设计应支持变化 5.怎样选择设计模式 6.怎样使用设计模式 1.什么是设计模式? 每一个模式描述了 ...

  4. 《设计模式 -- 可复用面向对象软件的基础》读后感

    第一章 引言 1.1 什么是设计模式 书中引用 Alexander 的话说,"每一个模式描述了一个在我们周围不断重复发生的问题,以及改问题的解决方案的核心.这样,你就可以一次又一次的使用该方 ...

  5. 设计模式 可复用面向对象软件的基础_面向对象的可复用设计模式之简单工厂模式(1/24)...

    在程序中,需要创建的对象很多,导致对象的new操作多且杂时,需要使用工厂模式: 由于对象的创建过程是我们不需要去关心的,而我们注重的是对象的实际操作,所以,我们需要分离对象的创建和操作两部分,如此,方 ...

  6. 设计模式-可复用面向对象软件的基础(所有Pdf整合到一起)下载

    网上流传的设计模式版本,很多地方都是分开的pdf文件,故在此分享一本合成到一起的. 文件:590m.com/f/25127180-483826656-82d45e (访问密码:551685) ---- ...

  7. 好书整理系列之-设计模式:可复用面向对象软件的基础 4

    第4章结构型模式 结构型模式涉及到如何组合类和对象以获得更大的结构.结构型类模式采用继承机制来 组合接口或实现.一个简单的例子是采用多重继承方法将两个以上的类组合成一个类,结果 这个类包含了所有父类的 ...

  8. C++ 设计模式(可复用面向对象软件的基础)学习笔记——第五讲 观察者模式

    对于设计模式初学者来说,GoF的这本设计模式(可复用面向对象软件的基础)是有些难理解的,因此我先看了视频教程,附上教程链接网址https://www.bilibili.com/video/av5225 ...

  9. 《设计模式:可复用面向对象软件的基础》——结构型模式(2)(笔记)

    文章目录 四.结构型模式 4.4 DECORATOR(装饰)--对象结构型模式 1.意图 2.别名 补充部分 3.动机 4.适用性 5.结构 6.参与者 7.协作 8.效果 9.实现 10.代码示例 ...

  10. 《设计模式:可复用面向对象软件的基础》——行为模式(3)(笔记)

    文章目录 五.行为模式 5.9 STRATEGY(策略) 1.意图 2.别名 3.动机 4.适用性 5.结构 6.参与者 7.协作 8.效果 9.实现. 10.代码示例 11.相关模式 5.10 TE ...

最新文章

  1. 中国联通华东云数据中心—电气培训
  2. 关于Qstring.replace传参Qstring.length为0引起程序退出的记录
  3. scala整型的类型及取值范围
  4. 浅谈前端实现页面加载进度条以及 nprogress.js 的实现
  5. bzoj1207: [HNOI2004]打鼹鼠
  6. JVM整体架构与调优参数说明
  7. 用php mui ajax注册登录页面,ajax实现简单登录页面
  8. mssql 无法启动调试器 数据为空_Windows无法启动:如何利用PE拯救桌面重要数据?...
  9. WINDOWS登录系统之前(欢迎界面)运行指定程序脚本服务
  10. ebyte Lora 转 4G 透传通讯测试
  11. Windows用户账户控制详解
  12. 1041:奇偶数判断
  13. 活动并发测试-1000个不同用户同时并发请求报名笔记
  14. 解锁网易云音乐客户端变灰歌曲
  15. 容联云CFO李亦鹏:智能化、国产化大势所趋 多业务云通讯构筑行业壁垒
  16. Android中使用ADB 命令安装和卸载系统程序
  17. linux 心脏滴血漏洞,心脏出血漏洞(heartbleeder 自动检测 OpenSSL 心脏出血漏洞 (附修复指南))...
  18. java关联宠物商店项目_Java实现宠物商店管理
  19. 2.从零开始学习C语言--C语言数据类型、变量以及进制转换
  20. 如何在LabVIEW中调用Python

热门文章

  1. Ventrilo初学者指南,面向游戏玩家的VoIP应用
  2. goland 注释模板_论文写作标准格式模板
  3. 系统上电后 bootloader的执行流程
  4. mysql实习报告总结_MySQL数据库实训报告 实训心得
  5. Oracle启动监听错误TNS-12555: TNS:permission denied
  6. 淘宝订单导出到excel_将产品添加到Excel订单
  7. 【长篇博文】Docker学习笔记与深度学习环境的搭建和部署(一)
  8. mysql横切竖切_MySQL常用操作 - cheney-f的个人空间 - OSCHINA - 中文开源技术交流社区...
  9. linux内存占用率高怎么办,Linux下如何解决高内存使用率问题?
  10. solidworks批量转存宏程序开发【可下载】