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
其实最重要的就是
下面我们就来新建一个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;
}
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;
}
相关文章推荐
- 设计模式之创建型模式 - 特别的变量问题
- c#静态方法和非静态方法详细介绍
- C#单例模式(Singleton Pattern)实例教程
- C语言中static的作用及C语言中使用静态函数有何好处
- 从汇编看c++中函数里面的static关键字的使用说明
- C++的static关键字及变量存储位置总结
- C#中实现抽象类里建立静态方法
- PHP中new static() 和 new self() 的区别介绍
- C#静态static的用法实例分析
- JavaScript类继承及实例化的方法
- static关键字的作用详解
- 浅谈C/C++中的static与extern关键字的使用详解
- C语言基础知识点解析(extern,static,typedef,const)
- c# static 静态数据成员
- php设计模式之单例、多例设计模式的应用分析
- 浅析php变量修饰符static的使用
- php面向对象全攻略 (十) final static const关键字的使用
- javascript 单例/单体模式(Singleton)
- asp.net静态方法弹出对话框实现思路
- 从内存地址解析Java的static关键字的作用