设计模式的理念
设计模式是在软件设计上去解决普通问题的可重用的方法
单例模式
单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
单例在整个程序的应用周期内有效。
可用于协调整个系统的统一行为。
使用的大概的场景:例如用忽的登录信息。
具体的代码的实现(这是一种比较好的方式还可以使用):
注意(static修饰的变量,是一个私有的全局变量)
static User *user;
+( instancetype ) sharedUser {
static dispatch_once onceToken;
dispatch_once ( &onceToken, ^ {
user = [ [ User alloc ] init ] ;
} );
return sharedSingleton;
}
调用sharedUser方法时获取到的对象是相同的,但是当我们通过alloc和init来构造对象的时候,有时候得到的对象却是不一样的。创建对象的步骤分为申请内存(alloc)、初始化(init)这两个步骤,为了确保对象的唯一性,因此在alloc这个阶段我们就要拦截它。当我们调用alloc方法时,oc内部会调用allocWithZone这个方法来申请内存,我们重写这个方法确保对象的唯一性。拷贝对象也是同样的原理,覆写copyWithZone方法
static User *user;
+( instancetype ) sharedUser {
static dispatch_once onceToken;
dispatch_once ( &onceToken, ^ {
user = [ [ User alloc ] init ] ;
} );
return user;
}
+(id) allocWithZone:(struct _NSZone *)zone {
static dispatch_once onceToken;
dispatch_once ( &onceToken, ^ {
user = [ User allocWithZone:zone ] ;
} );
return user;
}
-(id)copy
{
return user;
}
-(id)multableCopy
{
return user;
}
工厂模式:
工厂方法也称为虚构造器,一个类无法预期需要生成哪个对象,想让其子类来指定所生成的对象。
代理设计模式:
为其它对象提供一种代理以控制对这个对象的访问。
观察者模式
定以对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并更新。