前言
最近和同事一起購入七天學會設計模式,不過書中是以 Java 作為示範語言; 而這邊,我會以 Swift 及 Objective-C 來攥寫範例並補充些內容。
Singleton
如同它的命名一般,在整個 App 運作時,僅會有一個 instance。
Swift
Swift 宣告 Singleton 的方式很簡單,就是在 class 底下宣告一個 static 的常數(constant)。
class SingletonDemo {
static let shared = SingletonDemo()
}
Objective-C
而 Objective-C 底下,我們要注意一些事情;
在 Multi-Thread 的情況下,我們得避免同時有多個 thread 執行建立 instance,故在創建時,必須使用 dispatch_once_t
來確保僅會有一個 thread 執行。
#import <UIKit/UIKit.h>
@interface SingletonDemo : NSObject
+ (instancetype)shared;
@end
#import "SingletonDemo.h"
@implementation SingletonDemo
+ (instancetype)shared {
static SingletonDemo *instance = nil;
static dispatch_once_t once_token;
dispatch_once(&once_token, ^{
instance = [[SingletonDemo alloc] init];
});
return instance;
}
@end
學會了如何創建 Singleton 之後,可以想想哪些物件適合以這種方式創建; 如「目前登入的使用者」,正是可以用 Singleton 的方式做設計,畢竟一個 App 同時僅能有一位使用者登入,是大多數軟體的設計,而這恰巧符合 Singleton 的精神。