单例模式的意义与设计
单例模式是设计模式中比较常见,而且非常简单的一种设计理念。 当你的应用程序中某个类只有唯一一个实例或对象供外界访问,就可以采用单例模式。例如,消息发送机制中的通知中心,又或者是UI界面中UIWindow,都可以采用单例模式来设计。
单例模式可以提供唯一的一个对象供其他类来访问,在面向对象的思想中,可以使整个程序看起来更井然有序,而且可以节省内存空间,因为单例一旦被创建,就会一直存在,其他类都将访问这唯一的实例。
#import <Foundation.Foundation.h>
@interface SingletonPattern : NSObject
{
@public
NSString *name; //为单例设计一个属性 ,来测试是否只存在唯一的对象
}
+ (SingletonPattern *)single;
@end
#import "SingletonPattern.h"
@implementation SingletonPattern
+ (SingletonPattern *)single
{
static SingletonPattern *single; //声明一个单例对象
if ( !single ) //如果单例对象不存在
{
single =[ [SingletonPattern alloc] init]; //创建一个新的单例对象
}
return single; // 返回创建好的实例
}
@end
下面我们来写另外一个类来访问该对象,测试是否只存在唯一的一个实例
#import <Foundation.Foundation.h>
@interface Test : NSObject
{
}
- (void)test;
@end
#import "Test.h"
#import "SingletonPattern.h" //导入单例头文件
@implementation Test
- (void)test
{
SingletonPattern *single = [SingletonPattern single ]; //使用单例类方法
NSLog(@"%@",single -> name); //访问单例的属性,但不为其赋值
}
#import <Foundation.Foundation.h>
#import "SingletonPattern.h"
#import "Test.h"
int main (int argc, const char * argv[])
{
@autoreleasepool {
SingletonPattern *single = [SingletonPattern single ];
single -> name = @"ABC" ;
Test *test1= [[Test alloc] init ];
[test1 test ];
}
return 0;
}
运行结果可以看到,输出的并不是NIL ,而是在main 函数中赋予的ABC, 可以得出SingletonPattern类只存在唯一的一个实例对象。