单例设计模式:解决的是一个类只能创建一个对象
iOS的单例模式有两种官方写法,如下:
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单利设计模式
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;
}
}既实现了线程安全,又避免了同步带来的性能影响
2:饿汉式
public classSingleton1 {
private Singleton1() {}
private static final Singleton1 single = new Singleton1();
//静态工厂方法
public static Singleton1 getInstance() {
return single;
}
}
饿汉式在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变,所以天生是线程安全的。