Skip to content

xia0peng/DesignPatterns

Repository files navigation

DesignPatterns

CI Status Version License Platform

Example

To run the example project, clone the repo, and run pod install from the Example directory first.

Author

xiaopengwang, [email protected]

License

DesignPatterns is available under the MIT license. See the LICENSE file for more info.

Part 1:设计模式初体验

Part 2:对象创建

工厂方法

工厂方法模式的类图

何时使用工厂方法

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

抽象工厂

一系列工厂及相关产品之间关系的类图

抽象工厂与工厂方法

两个模式都用于相同的目的:创建对象而不让客户端知晓返回了什么确切的具体对象

抽象工厂 工厂方法
通过对象组合创建抽象产品 通过类继承创建抽象产品
创建对系列产品 创建一种产品
必须修改父类的接口才能支持新产品 子类化创建者并重载工厂方法以创建新产品

生成器

生成器类图

何时使用生成器模式

  • 需要创建涉及各种部件的复杂对象。创建对象的算法应该独立于部件的装配方式。常见例子是构建组合对象
  • 构建过程需要以不同的方式(例如,部件或表现的不同组合)构建对象

单利

单利模式静态结构

何时使用单利模式

  • 类只能有一个实例,而且必须从一个为人熟知的访问点对其访问,比如工厂方法
  • 这个唯一的实例只能通过子类化进行扩展,而且扩展的对象不会破坏客户端代码

Part 3:接口适配

适配器

类适配器的类图 对象适配器类图

何时使用接口适配模式

  • 已有类的接口与需求不匹配
  • 想要一个可复用的类,该类能够同可能带有不兼容接口的其他类协作
  • 需要适配一个类的几个不同子类,可是让每一个子类去子类化一个类适配器又不现实。那么可以使用对象适配器(也叫委托)来适配其父类的接口

类适配器与对象适配器的特征对比

类适配器 对象适配器

Part 6:行为扩展

责任链

责任链类图

何时使用责任链

  • 有多个对象可以处理请求,而处理程序只有在运行时才能确定
  • 向一组对象发出请求,而不想显式指定处理请求的特定处理程序

性能与对象访问

亨元

当满足以下所有条件时,自然会考虑使用这个模式:

  • 应用程序使用很多对象
  • 在内存中保存对象会影响内存性能
  • 对象的多数特有状态(外在状态)可以放到外部而轻量化
  • 移除了外在状态后,可以用较少的共享对象替代原来的那组对象
  • 应用程序不依赖于对象标识,因为共享对象不能提供唯一的标识

代理

在下列情景,自然会考虑使用这一模式:

  • 远程代理,为位于不同地址空间或网络中的对象提供本地代表。
  • 虚拟代理,来根据要求创建重型的对象。
  • 保护代理,来根据不同访问权限控制对原对象的访问。
  • 只能引用代理,通过对实体对象的引用进行计数来管理内存,也能用于锁定实体对象,让其对象不能修改它。

对象状态

备忘录

当同时满足以下两个条件时,应当考虑使用这一模式:

  • 需要保存一个对象(或某部分)在某一个时刻的状态,这样以后就可以恢复到先前的状态
  • 用于获取状态的接口会暴露实现细节,需要将其隐藏起来

About

Pro Objective-C Design Patterns for iOS

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published