kyuuuuuuuuuuriのブログ

うぇぶエンジニアになりたくてなりたくて震えるもろきゅうの日記です

シングルトンというデザインパターン

シングルトンというのを教わったので、まとめておきます!
詳しいことはggrksなんですがw

http://ja.wikipedia.org/wiki/Singleton_パターン

どの言語にも共通して存在するデザインパターンらしいです。
理解した範囲でまとめると、

インスタンスが一つしか作れないクラスを生成する
インスタンスが一つしか作れないので、値を保持でき、違うクラスの間の値の橋渡しができる
*どのクラスからも呼び出せる

記述的にまちがっているかもしれませんが、多分こんな感じ…!多分


今はobjective-cをやっているので、
objective-cのシングルトンクラスの作り方です

.h

#import <Foundation/Foundation.h>

@interface xxx : NSObject {
}

+(xxx*)sharedManager;

@end
.m

#import "xxx.h"

@implementation xxx

static xxx * sharedObj = nil; //たった一つのインスタンス


+(xxx*)sharedManager {
    @synchronized(self) {
        if( sharedObj == nil ) {
            sharedObj = [[self alloc] init];
        }
    }
    return sharedObj;
}

+(id)allocWithZone:(NSZone *)zone {
    @synchronized(self){
        if( sharedObj == nil ) {
            sharedObj = [super allocWithZone:zone];
            return sharedObj;
        }
    }
    
    return nil;
}

- (id)copyWithZone:(NSZone*)zone {
    return self;  // シングルトン状態を保持するため何もせず self を返す
}

- (id)retain {
    return self;  // シングルトン状態を保持するため何もせず self を返す
}

- (unsigned)retainCount {
    return UINT_MAX;  // 解放できないインスタンスを表すため unsigned int 値の最大値 UINT_MAX を返す
}

- (void)release {
    // シングルトン状態を保持するため何もしない
}

- (id)autorelease {
    return self;  // シングルトン状態を保持するため何もせず self を返す
}

@end


シングルトンを使う

[[xxx sharedManager] (自分で定義したメソッド)];


今度javaも調べてみよう…。