设计模式-案例分析:设计一个应用程序《二》
2019-01-01 本文已影响42人
liyoucheng2014
设计过程中有3个重要的里程碑
- 想法的概念化
- 界面外观的设计
- 架构设计
一、想法的概念化
- 可以用手指涂鸦的画板
- 用户可以改变线条颜色和粗细
- 允许用于保存涂鸦图
- 允许用户打开保存的涂鸦图
- 允许用户删除当前涂鸦图
- 允许用户撤销和恢复涂鸦图
二、界面外观的设计
界面外观驱动的设计:尽早设计接近最终产品的完整界面外观与用户体验。
其它针对技术细节:数据驱动的设计、事件驱动的设计和测试驱动的设计
三、架构设计
我们要列出并考察通过细化原始需求而得出的一些问题。每个问题都有与原问题相关的细化而特定的特征或子问题。
- 视图管理
-
从一个视图到另一个视图的迁移
典型的iOS应用程序设计中,控制器之间的依存图 -
使用中介者来协调视图迁移
引入终结者之后,控制器及其按钮之间的依存图
中介模式:用一个对象来封装一组对象之间的交互逻辑
-
- 如何表现涂鸦
-
在屏幕上可以画“什么”
使用Quartz 2D画点和线条的直观描述 -
用组合结构来表示痕迹(mark)
点与线条的组合结构
-
-
绘制涂鸦图
-
如何表现保存的涂鸦图
1)一般的对象保存过程分解为多个步骤
a. 把对象结构序列化成结构化的文件块blob;
b. 构建要保存blob的文件系统中的路径;
c. 像普通文件一样保存blob。
2)从文件系统加载同一blob并恢复原先的对象结构
a. 重建文件系统中保存blob的路径;
b. 像普通文件一样从文件系统加载blob;
c. 反序列化并恢复原先的对象结构。
-
获取涂鸦图的状态
Scribble的状态如何保存为ScribbleMemento对象的时序图
- 恢复涂鸦图的状态
- 用户操作
- 浏览涂鸦缩略图的列表
- 涂鸦图的撤销和恢复
- 变更线色和线宽
- 删除屏幕上的当前涂鸦图
设计模式回顾
- 中介者
- 组合
- 访问者
- 代理
- 备忘录
- 命令
- 观察者
ConcreteClass拥有对AnotherClass对象的引用,但不拥有AnotherClass对象的实体
聚合ConcreteClass和AnotherClass构成聚合(aggregation)体。聚合体由ConcreteClass来表示。AnotherClass不是聚合体,使用双箭头来表示多于一个。ConcreteClass包含有AnotherClass的多个实例,即instanceVariable_。
伪代码 带有圆形根部的箭头表示源自aClass对象的引用的对象图