使用Object-C实现23种设计模式之单例模式
来源:互联网 发布:淘宝卖家陈曦 编辑:程序博客网 时间:2024/05/19 13:14
今天给大家讲解一下第四种创建模式——单例模式,单例模式不同于前几种,前几种更注重逻辑,而单例模式则偏重于内存管理以及实际运用,相对前几种要相对简单。
所谓单例模式,就是一种让某个类只产生单一实例的模式,不管通过何种方法获得的实例,其指向的内存地址均相同,这块内存被所有实例所共享,这种模式不仅有效的节约了内存,避免了不必要的内存浪费,而且还在某一程度上消除了实例之间的二义性。
Windows操作系统当中的回收站就是典型的单例模式的应用场景,试想,如果电脑操作系统当中存在两个回收站,会是怎样一种场景?首先,你要删除的东西系统不知道要放入哪一个回收站,其次,会造成很大程度上的内存资源浪费,再次,完全不符合应用逻辑,不便于管理。
下面,就以回收站为例,简单介绍一下单例模式的实现。
首先,定义一个RecycleBin类(回收站类),在类的内部添加一个静态的变量,作为唯一的共享变量。
RecycleBin.h
#import <Foundation/Foundation.h>
@interface RecycleBin : NSObject
+(id)getRecycleBin;//返回实例的方法,当共享变量为nil是,开辟一个新的空间给共享变量,当共享变量不为空时,返回该共享变量
@end
#import "RecycleBin.h"
@interface RecycleBin()
-(instancetype)init;//将init方法私有
@end;
static RecycleBin* _instance =nil;//静态变量
@implementation RecycleBin
+(id)getRecycleBin{
if(_instance ==nil){
_instance = [[RecycleBinalloc]init];
}
return_instance;
}
-(instancetype)init{
return self;
}
-(id)copyWithZone:(NSZone*)zone{//重写copy方法,当执行copy函数时,返回该共享变量
return_instance;
}
+(id)allocWithZone:(struct_NSZone *)zone{//重写alloc方法
@synchronized (self) {
if(!_instance){
_instance = [superallocWithZone:zone];
return _instance;
}
}
return_instance;
}
@end
总之,单例模式需要把所有可能产生新对象的方法重写,使之返回的对象为类中的唯一的共享变量。
下面,对本程序做一下测试:
#import <Foundation/Foundation.h>
#import "RecycleBin.h"
int main(int argc,constchar * argv[]) {
@autoreleasepool {
RecycleBin *recycleBin1 = [RecycleBingetRecycleBin];
RecycleBin *recycleBin2 = [RecycleBingetRecycleBin];
RecycleBin *recycleBin3 = [recycleBin1copy];
RecycleBin *recycleBin4 = [RecycleBinalloc];
NSLog(@"%@",recycleBin1);
NSLog(@"%@",recycleBin2);
NSLog(@"%@",recycleBin3);
NSLog(@"%@",recycleBin4);
}
return 0;
}
2016-05-23 22:38:50.560 设计模式之四单例模式[944:48960] <RecycleBin: 0x100204b00>
2016-05-23 22:38:50.561 设计模式之四单例模式[944:48960] <RecycleBin: 0x100204b00>
2016-05-23 22:38:50.562 设计模式之四单例模式[944:48960] <RecycleBin: 0x100204b00>
2016-05-23 22:38:50.562 设计模式之四单例模式[944:48960] <RecycleBin: 0x100204b00>
Program ended with exit code: 0
可以看到,这四个变量的内存地址均相同,测试成功。
以上为我个人对单例模式的简单理解,如有不到之处,敬请批评指正。
未完待续。。。
- 使用Object-C实现23种设计模式之单例模式
- 使用Object-C实现23种设计模式之工厂方法模式
- 使用Object-C实现23种设计模式之抽象工厂模式
- 使用Object-C实现23种设计模式之建造者模式
- 使用Object-C实现23种设计模式之原型模式
- 使用Object-C实现23种设计模式之适配器模式
- 使用Object-C实现23种设计模式之装饰器模式
- 23种设计模式之python实现--单例模式
- Object-c之单例模式
- 设计模式--单例模式 C++实现
- (C#)设计模式 之 单例模式
- 设计模式之单例模式(C++)
- C#--设计模式之单例模式
- Object-c单例模式
- object-c 单例模式
- Object -c 单例模式
- Object-C 单例模式
- object c 单例模式
- 控制反转与以来注入
- 利用ssh和scp在两台Ubuntu主机间传输文件
- 数据库
- linux查看当前系统有几个账户
- Xcode添加静态库以及编译选项配置常见问题
- 使用Object-C实现23种设计模式之单例模式
- 选择排序—简单选择排序(Simple Selection Sort)
- 用类的友元函数,而不是成员函数定义复数类重载运算符+、-、*、/,使之能用于复数的加减乘除
- 安卓实战之如何快速搭建app架构
- python正则学习总结
- 面试题:程序启动原理
- HTML之表单(笔记)
- 开发模型
- shell(一)