Singleton 单例模式

转http://blog.csdn.net/remote_roamer/article/details/7107007

Singleton 单例模式,在项目中数据库方面代码用到,应用了 Singleton 单例模式的类会保证同时只有一个对象存在,可以全局调用,项目中用于资源共享控制,可以让数据库的操作函数变成一种全局资源,不同的类都可以调用。

总的来说,实现一个单例类需要几点:

1.静态实例:初始化静态实例

2.构造方法:根据静态实例是否存在来决定新建实例还是返回实

3.重写allocWithZone防止重复创建对象(可选)

 

首先头文件:

#import <UIKit/UIKit.h>

#import <sqlite3.h>

@interface OperationalDatabase : NSObject{//新建直接继承NSObject的类

sqlite3 *database;

}

+ (OperationalDatabase *) defaultManager;//声明静态实例

//////////////////////////数据库的基本操作//////

-(void)openDatabase;

-(void) close;

///////////获取数据

-(NSArray *)getAreaArray;

-(NSString *)getAreaByCity:(NSString *)city;

-(NSArray *)getCityArray:(NSString *)area;

-(NSArray *)getAllCityArray;

-(NSArray *)getSystemArray:(NSString *)city;

-(NSArray *)getAllShopTypeArray:(NSString *)city;

-(NSArray *)getShopTypeArrayFromCityAndSystem:(NSString *)city System:(NSString *)system;

@end

 然后是.m文件:

#import “OperationalDatabase.h”

#import “SQL.h”

#import “JSON.h”

@implementation OperationalDatabase

static OperationalDatabase *defaultManager; //静态实例

+ (OperationalDatabase *) defaultManager{//构造方法,如果不存在实例就初始化

if (!defaultManager) {

defaultManager=[[OperationalDatabase alloc] init];

[defaultManager openDatabase];

}

return defaultManager;

}

//各种数据库方法的实现

-(void)openDatabase

{

}

-(void) close

{

}

-(int)getIdCount{

}

没写allocWithZone的原因是,项目比较小,也没涉及到多线程概念,对象的使用和创建我可控。接下来是使用这个单例类,比如这里我想要获得ID的数量,需要做的是:

#import “OperationalDatabase.h”//引入单例类头文件

 

……..

 

//想获取ID数量的位置引用单例对象

NSString *idCount=[[OperationalDatabase defaultManager] getIdCount];

所以单例类用法类似于一个全局变量的用法,引用头文件就像extern声明,然后调用构造函数和具体方法就可以了

posted @ 2013-03-15 14:26  小乐"  阅读(185)  评论(0编辑  收藏  举报