七天學會設計模式 - Singleton

前言

最近和同事一起購入七天學會設計模式,不過書中是以 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 的精神。

comments powered by Disqus