iOS设计模式解析一书总结

2020-04-19  本文已影响0人  最初的自己_f7c3

在iOS中有21种设计模式,这些设计模式都是为了解决某种场景下的问题,可以把这21种设计模式分为如下场景下的几类:

对象创建

原型模式
  1. 需要创建的对象应独立于类型与创建方式(创建的时候不关心对象的创建方式及其类型
  2. 不同的实例间差异很小,只需要做一点点修改就可以,那么直接复制已有的类会更加方便
  3. 实例的创建过程很复杂,可能有多个对象的嵌套,那么直接复制会更加容易
[obj copy]

不同于cocoa touch框架中的对象,如果是自定义的对象,那么需要继承NSCopying协议,并实现其中的

- (id)copyWithZone:(NSZone *)zone;
工厂模式
  1. 各种子类对象重载其父类的构造方法,创建自己
  2. 抽象类提供不同的创建方法创建私有子类或者其他类的对象
  1. 编译时无法预估要创建什么类
  2. 抽象类想要其各个子类实现初始化方法
  1. 通过在抽象类中定义实例方法,在其子类中各自实现。并通过不同子类所对应的工厂调用构造方法来实现, 达到使用者-->工厂-->实例对象这一过程,这样做就降低了使用者与具体类的耦合,专注于工厂的构建就可以了。
  2. 类工厂方法 例如cocoaTouch中,NSNumber 的类工厂方法,其通过
[NSNumber numberWithBool:bool]
[NSNumber numberWithInt:int]

来创建一个合适的子类

抽象工厂
NSNumber *intNumber = [NSNumber numberWithInt:1];
NSNumber *boolNumber = [NSNumber numberWithBool:YES];

这里的NSNumber就是抽象的工厂,这两个方法,都是生产子工厂的方法。

[intNumber charValue];
[boolNumber charValue];

而这两个charValue方法,他们的实现分别来自于两种不同的子类,就是对NSNumber抽象工厂中的charValue方法的重载。charValue就是生产方法,其返回的char类型的值,就是生产出的产品

生成器
if (type == vip1) {
xxxxEnable = YES;
...
} else if (type  == vip2) {
xxxxEnable = YES;
...
} else if (type  == vip3) {
xxxxEnable = YES;
...
}
return vip;

生成器模式中,代码会是这样的

vip1 = [director createVip1:builder];
vip2 = [director createVip2:builder];
上一篇下一篇

猜你喜欢

热点阅读