iOS设计模式解析(一)

iOS设计模式解析(一)

2018, Oct 13    

iOS设计模式解析(一)

案例分析:设计一个应用程序

用户需求:

  • 可以用手指涂鸦的画板
  • 用户可以改变线条颜色和粗细
  • 允许用户保存涂鸦
  • 允许用户打开已经保存的涂鸦
  • 允许用户删除涂鸦
  • 允许用户撤销和恢复涂鸦

### 主要问题和细化特征:

  • 视图管理
    • 从一个视图到另外一个视图的迁移
    • 使用中介者来协调视图的迁移
  • 如何表现涂鸦
    • 在屏幕上可以画 ‘什么’
    • 用组合结构来表示痕迹 (mark)
    • 绘制涂鸦图
  • 如何表现保存的涂鸦
    • 获取涂鸦的状态
    • 恢复涂鸦的状态
  • 用户操作
    • 浏览涂鸦缩略图的列表
    • 涂鸦图的撤销和恢复
    • 变更线色与线宽
    • 删除屏幕上的当前涂鸦图

视图管理

分析业务 我们需要3个控制器:

  • CanvasViewController
  • PaletteViewController
  • ThumbnailViewController

为了完成视图的迁移和避免业务拓展引发的耦合 需要使用 中介者 来解耦合

文件保存

使用 备忘录 的设计模式 进行文件保存的处理

原型设计模式

以下场景下, 考虑使用原型设计模式:

  • 需要创建的对象应独立于其类型和创建方式
  • 需要实例化的类是运行时决定的
  • 不想要与产品层次相对应的工厂层次
  • 不同类的实例间的差异仅仅是状态的若干组合。 因此复制相应数量的原型比手工实例化更加方便
  • 类不容易创建, 比如每个组件可以把其他组件作为子节点的组合对象。复制已有的组合对象并对副本修改会更加容易

原型设计模式的本质是 通过 copy 利于复用

工厂设计模式

何时使用:

  • 编译时无法准确预期要创建的对象的类
  • 类想让其子类决定在运行时创建什么
  • 类有若干辅助类作为其子类, 而你想返回哪个子类这个信息局部化。

变动需要抽象

抽象工厂