Singleton Pattern 单例模式
来源:互联网 发布:农业 知乎 编辑:程序博客网 时间:2024/06/05 07:15
Singleton pattern:单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。
以上内容来自百度百科。
单例模式的基本思路:
- 为单例对象实现一个静态实例,设置成 nil。
- 调用时检查是否为 nil,是则创建否则直接使用。
- 修改alloc等方法,预防被创建新实例。
- 本质上,每次调用单例对象的实例方法,就只是创建了指针来指向该单例对象已经分配好的内存。
Objective - C 实现单例方法1
- 在 .h 文件中加入类工厂方法:
#import <Foundation/Foundation.h>@interface SingletonGeekBand : NSObject+(SingletonGeekBand *)shared;@end
- 在 .m 文件中加入方法实现。
#import "SingletonPattern.h"// 建立静态变量static SingletonPattern * shared = nil;@implementation SingletonPattern// 类工厂方法,如果 shared 还没初始化则初始化,否则直接调用+ (SingletonPattern *)shared { // 确保单线程 @synchronized(self) { if (shared == nil) { shared = [[self alloc] init]; } } return shared;}// 重写 alloc 方法,确保不会被重新分配新的实例内存。+(instancetype)alloc { @synchronized(self) { if (shared == nil) { shared = [super alloc]; return shared; } } return shared;}// 重写 allocWithZone+ (id)allocWithZone:(struct _NSZone *)zone { @synchronized(self) { if (shared == nil) { shared = [super allocWithZone:zone]; return shared; } } return nil;}// 重写 copyWithZone+ (id)copyWithZone:(NSZone *)zone { return self;}@end
Objective - C 实现单例方法2
- 在 .h 文件中加入类工厂方法:
#import <Foundation/Foundation.h>@interface Singleton : NSObject+ (instancetype) shareInstance;@end
- 在 .m 文件中加入方法实现。
#import "Singleton.h"@implementation Singleton+ (instancetype) shareInstance { static dispatch_once_t dispatch = 0; static Singleton * instance; dispatch_once(&dispatch,^{ instance = [[Singleton hiddenAlloc] init]; }); return instance;}+ (instancetype)alloc { return [self shareInstance];}+ (instancetype)hiddenAlloc { return [super alloc];}@end
Swift 实现单例
基本思路:
利用static创建静态变量,然后把初始化器隐藏起来。
class Custom { // MARK: - Singleton Class static var shared = Custom() private override init() { super.init() }}
0 0
- 单例模式(Singleton Pattern)
- Singleton Pattern (单例模式)
- 单例模式( Singleton Pattern)
- 单例模式【SINGLETON PATTERN 】
- 单例模式(Singleton Pattern)
- 单例模式【Singleton Pattern】:
- 单例模式(singleton pattern)
- 单例模式(Singleton Pattern)
- 单例模式(Singleton Pattern)
- 单例模式(singleton pattern)
- 单例模式【Singleton Pattern】
- Singleton Pattern 单例模式
- 单例模式【Singleton Pattern】
- 单例模式(Singleton Pattern)
- Singleton Pattern 单例模式
- 单例模式-Singleton Pattern
- 单例模式(Singleton Pattern)
- 单例模式(Singleton Pattern)
- MacBook怎样装Win10 双系统玩转Win10
- 设计模式 - AbstactFactory 模式
- caller与callee
- 关于大型网站技术演进的思考(二):存储的瓶颈(2)
- Qt的 OpenSSH配置
- Singleton Pattern 单例模式
- AVL平衡二叉树的c++实现
- 程序对自己锁定,类似钉钉
- 在 Linux 下用 mkdir 命令来创建目录和子目录
- 博主作品《循序渐进Linux》第二版出版发行啦(附封面和目录)
- Eclipse引入UEI项目
- 【设计模式】——观察者模式
- 【Linux Shell脚本攻略之一】find命令:文件查找和文件列表
- mysql Blob和Text字段过程错误