單例設(shè)計(jì)模式:解決的是一個(gè)類只能創(chuàng)建一個(gè)對(duì)象
iOS的單例模式有兩種官方寫(xiě)法,如下:
1)不使用GCD的方式
#import"Manager.h"
static Manager *manager = nil;
@implementation Manager
+(Manager*)defaultManager
{
if(!manager)
manager=[[self allocWithZone:NULL] init];
return manager;
}
@end
2)使用GCD的方式
#import"Manager.h"
@implementation Manager
+(Manager *)sharedManager
{
staticdispatch_once_t predicate;
staticManager *sharedManager;
dispatch_once(&predicate, ^{
sharedManager=[[Manager alloc] init];
});
return?sharedManager;
}
@end
Java單利設(shè)計(jì)模式
1.懶漢式
public class Singleton {
private static class LazyHolder?{
private static final Singleton?INSTANCE?= new Singleton();
}
private Singleton?(){}
public static final Singleton?getInstance()?{
return LazyHolder.INSTANCE;
}
}既實(shí)現(xiàn)了線程安全,又避免了同步帶來(lái)的性能影響
2:餓漢式
public classSingleton1 {
private Singleton1()?{}
private static final Singleton1?single?= new Singleton1();
//靜態(tài)工廠方法
public static Singleton1?getInstance()?{
return single;
}
}
餓漢式在類創(chuàng)建的同時(shí)就已經(jīng)創(chuàng)建好一個(gè)靜態(tài)的對(duì)象供系統(tǒng)使用,以后不再改變,所以天生是線程安全的。