2018-05-04 《设计模式:可复用面向对象软件的基础》- 实例研究
- 第二章 实例研究:设计一个文档编辑器
- 遇到的问题
- 文档结构
- 递归组合
- 总结
第二章 实例研究:设计一个文档编辑器
目标:设计一个名为 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 《设计模式:可复用面向对象软件的基础》- 实例研究相关推荐
- 设计模式:可复用面向对象软件的基础
文章目录 设计模式 设计模式有4个基本要素 23个设计模式 设计模式分类 目的准则 范围准则 导致重新设计的一般原因,以及解决这些问题的设计模式举例 设计模式所支持的设计的可变方面 设计模式背后的6大 ...
- 设计模式-可复用面向对象软件的基础(第二章 实例研究)-阅读笔记
目录 第二章 实例研究:设计一个文档编辑器 2.1 设计问题 2.2 文档结构 2.3 格式化 2.4 修饰用户界面 2.5 支持多种观感标准 2.6 支持多种窗口系统 2.7 用户操作 2.8 拼写 ...
- 设计模式-可复用面向对象软件的基础
文章目录 1.什么是设计模式? 2.描述设计模式 3.设计模式怎样解决设计问题? 描述对象的实现 4.设计应支持变化 5.怎样选择设计模式 6.怎样使用设计模式 1.什么是设计模式? 每一个模式描述了 ...
- 《设计模式 -- 可复用面向对象软件的基础》读后感
第一章 引言 1.1 什么是设计模式 书中引用 Alexander 的话说,"每一个模式描述了一个在我们周围不断重复发生的问题,以及改问题的解决方案的核心.这样,你就可以一次又一次的使用该方 ...
- 设计模式 可复用面向对象软件的基础_面向对象的可复用设计模式之简单工厂模式(1/24)...
在程序中,需要创建的对象很多,导致对象的new操作多且杂时,需要使用工厂模式: 由于对象的创建过程是我们不需要去关心的,而我们注重的是对象的实际操作,所以,我们需要分离对象的创建和操作两部分,如此,方 ...
- 设计模式-可复用面向对象软件的基础(所有Pdf整合到一起)下载
网上流传的设计模式版本,很多地方都是分开的pdf文件,故在此分享一本合成到一起的. 文件:590m.com/f/25127180-483826656-82d45e (访问密码:551685) ---- ...
- 好书整理系列之-设计模式:可复用面向对象软件的基础 4
第4章结构型模式 结构型模式涉及到如何组合类和对象以获得更大的结构.结构型类模式采用继承机制来 组合接口或实现.一个简单的例子是采用多重继承方法将两个以上的类组合成一个类,结果 这个类包含了所有父类的 ...
- C++ 设计模式(可复用面向对象软件的基础)学习笔记——第五讲 观察者模式
对于设计模式初学者来说,GoF的这本设计模式(可复用面向对象软件的基础)是有些难理解的,因此我先看了视频教程,附上教程链接网址https://www.bilibili.com/video/av5225 ...
- 《设计模式:可复用面向对象软件的基础》——结构型模式(2)(笔记)
文章目录 四.结构型模式 4.4 DECORATOR(装饰)--对象结构型模式 1.意图 2.别名 补充部分 3.动机 4.适用性 5.结构 6.参与者 7.协作 8.效果 9.实现 10.代码示例 ...
- 《设计模式:可复用面向对象软件的基础》——行为模式(3)(笔记)
文章目录 五.行为模式 5.9 STRATEGY(策略) 1.意图 2.别名 3.动机 4.适用性 5.结构 6.参与者 7.协作 8.效果 9.实现. 10.代码示例 11.相关模式 5.10 TE ...
最新文章
- 中国联通华东云数据中心—电气培训
- 关于Qstring.replace传参Qstring.length为0引起程序退出的记录
- scala整型的类型及取值范围
- 浅谈前端实现页面加载进度条以及 nprogress.js 的实现
- bzoj1207: [HNOI2004]打鼹鼠
- JVM整体架构与调优参数说明
- 用php mui ajax注册登录页面,ajax实现简单登录页面
- mssql 无法启动调试器 数据为空_Windows无法启动:如何利用PE拯救桌面重要数据?...
- WINDOWS登录系统之前(欢迎界面)运行指定程序脚本服务
- ebyte Lora 转 4G 透传通讯测试
- Windows用户账户控制详解
- 1041:奇偶数判断
- 活动并发测试-1000个不同用户同时并发请求报名笔记
- 解锁网易云音乐客户端变灰歌曲
- 容联云CFO李亦鹏:智能化、国产化大势所趋 多业务云通讯构筑行业壁垒
- Android中使用ADB 命令安装和卸载系统程序
- linux 心脏滴血漏洞,心脏出血漏洞(heartbleeder 自动检测 OpenSSL 心脏出血漏洞 (附修复指南))...
- java关联宠物商店项目_Java实现宠物商店管理
- 2.从零开始学习C语言--C语言数据类型、变量以及进制转换
- 如何在LabVIEW中调用Python
热门文章
- Ventrilo初学者指南,面向游戏玩家的VoIP应用
- goland 注释模板_论文写作标准格式模板
- 系统上电后 bootloader的执行流程
- mysql实习报告总结_MySQL数据库实训报告 实训心得
- Oracle启动监听错误TNS-12555: TNS:permission denied
- 淘宝订单导出到excel_将产品添加到Excel订单
- 【长篇博文】Docker学习笔记与深度学习环境的搭建和部署(一)
- mysql横切竖切_MySQL常用操作 - cheney-f的个人空间 - OSCHINA - 中文开源技术交流社区...
- linux内存占用率高怎么办,Linux下如何解决高内存使用率问题?
- solidworks批量转存宏程序开发【可下载】