디자인 모델 - 23 가지 디자인 모델 의 단일 모델

단일 모드 (Singleton Pattern)
Ensure a class has only one instance, and provide a global point of access to it.
하나의 클래스 가 하나의 인 스 턴 스 만 있 는 지 확인 하고 자체 적 으로 예화 하여 전체 시스템 에 이 인 스 턴 스 를 제공 합 니 다.
iOS 응용 예시NSNotificationCenter UIApplication NSUserDefaults
Rules
  • 단 례 는 프로그램 생명주기 에서 유일 해 야 한다
  • 첫 번 째 규칙 을 따른다. 즉, 단일 사례 의 유일 성 을 확보 하 는 것 이다. 대부분 상황 에서 우리 가 고려 하 는 것 은 하나의 사례 가 반드시 thread - safe (12306 표 뺏 을 때 모든 사람 이 하나의 스 레 드 를 대표 한다 면 두 사람 이 같은 기차 표를 사지 않도록 해 야 한다. 즉, 다 중 스 레 드 가 병발 하 는 상황 에서 논리 적 으로 정확 하고 스 레 드 안전 이 라 고 부른다)
  • 코드 구현
    Objective-C
    + (instancetype)sharedInstance{
        //    GCD   
        static SingleTonClass *sharedInstance = nil; //unique-ness
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{ //thread-safe
            sharedInstance = [[SingleTonClass alloc] init];
        });
        return sharedInstance;
    }

    PS: Objective - C 에는 개인 적 인 방법 이 없습니다. 외부 호출 [[SingleTonClass alloc] init]; 을 할 수 있 습 니 다. 협의 로 만 보증 할 수 있 습 니 다.
    Swift
    class SingleTonClass {
        //     swift ,          ,    
        static let sharedInstance = SingleTonClass() //thread-safe
        private init() {} //unique-ness
    }

    PS: swift 에서 전역 변수 static 변 수 는 dispatchonce 원자 성 확보 (A. K. A thread - safe)
    Python(Singleton, metaclass, _metaclass_)
    class Singleton(type):
        _instances = {}
        def __call__(cls, *args, **kwargs):
            if cls not in cls._instances:
                cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
            return cls._instances[cls]
    
    class Logger(object):
        __metaclass__ = Singleton

    Node. js (노드 단일 스 레 드, 모듈, 싱글 톤)
    var singleton = function singleton(){}
    
    singleton.instance = null;
    
    singleton.getInstance = function(){
        if(this.instance === null){
            this.instance = new singleton();
        }
        return this.instance;
    }
    
    module.exports = singleton.getInstance();
    

    좋은 웹페이지 즐겨찾기