您的位置:首页 > 移动开发 > Objective-C

IOS开发基础Object-C(12)—单例模式

2015-12-30 22:11 513 查看
单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。

1.单例模式的要点:

  显然单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。

2.单例模式的优点:

  1.实例控制:Singleton 会阻止其他对象实例化其自己的 Singleton 对象的副本,从而确保所有对象都访问唯一实例。
  2.灵活性:因为类控制了实例化过程,所以类可以更加灵活修改实例化过程
 
我们来举一个例子吧

比如说,我们需要有一个银行,可以在银行中存钱和取钱,银行的总钱数会随着存钱取钱而变化

我们来新建一个类 银行类

//
// Bank.h
// 08-Bank
//
// Created by cuixuerui on 15/12/29.
// Copyright (c) 2015年 cuixuerui. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Bank : NSObject

@property int money;

-(instancetype)initWithMoney:(int)money;

+(Bank *)defaualtBank;
@end

实现算法 Bank.m
//
// Bank.m
// 08-Bank
//
// Created by cuixuerui on 15/12/29.
// Copyright (c) 2015年 cuixuerui. All rights reserved.
//

#import "Bank.h"

@implementation Bank

-(instancetype)initWithMoney:(int)money {

if (self =[super init]) {
_money=money;
}
return self;
}

+(Bank *)defaualtBank {

static Bank *bank;//全局变量
if (!bank) {//这句确保只有一个实例
bank = [[Bank alloc]initWithMoney:1000];//自行创建实例
}
return bank;

}
@end


其实最重要的就是
+(Bank *)defaualtBank;
这是单例模式的关键所在
下面我们就来新建一个Person类

// PersonOne.h
// 08-Bank
//
// Created by cuixuerui on 15/12/29.
// Copyright (c) 2015年 cuixuerui. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Bank.h"

@interface PersonOne : NSObject{

Bank * _bank;
}

-(void)withDrawMoney:(int)money;
-(void)saveMoney:(int)money;

//-(instancetype)init;
@end

实现person类

//
// PersonOne.m
// 08-Bank
//
// Created by cuixuerui on 15/12/29.
// Copyright (c) 2015年 cuixuerui. All rights reserved.
//

#import "PersonOne.h"
#import "Bank.h"
@implementation PersonOne

-(instancetype)init{

if (self = [super init]) {
_bank = [Bank defaualtBank];
}
return self;
}

-(void)saveMoney:(int)money {

//一定要用创建单例对象的方法去创建

[_bank setMoney:[_bank money]+money];

NSLog(@"银行里还有%d",[_bank money]);

}

-(void)withDrawMoney:(int)money {

[_bank setMoney:[_bank money]-money];

NSLog(@"银行里还有%d",[_bank money]);

}
@end


最后在main方法中调用

//
// main.m
// 08-Bank
//
// Created by cuixuerui on 15/12/29.
// Copyright (c) 2015年 cuixuerui. All rights reserved.
//

#import <Foundation/Foundation.h>

#import "PersonOne.h"
int main(int argc, const char * argv[]) {

PersonOne *p1 = [[PersonOne alloc] init];

[p1 saveMoney:500];

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息