Loading [MathJax]/extensions/tex2jax.js

2015年3月10日火曜日

Singleton Collection

いろんな言語でSingletonを実装してみると言語ごとの違いがよく出て面白い。 ただ、C言語はかなりノリで作ったものなので、こうこともできるという参考ということで。
#include <stdio.h>
#include <stdlib.h>
typedef struct singleton{
int id;
struct singleton* (*getInstance)();
} Singleton;
static Singleton *instance;
Singleton *getInstance(){
if(instance == NULL){
instance = (Singleton *)malloc(sizeof(Singleton));
}
return instance;
}
Singleton* createSingleton(){
Singleton *instance = getInstance();
instance->getInstance = getInstance;
return instance;
}
int main(){
Singleton *s1 = createSingleton();
Singleton *s2 = createSingleton();
s1->getInstance()->id=10;
s2->getInstance()->id=20;
Singleton *obj = s1->getInstance();
//if obj->id is 20, it may be singleton.
printf("%d",obj->id );
}
view raw singleton.c hosted with ❤ by GitHub
final class Singleton{
private static Singleton instance;
private Singleton(){}
public static synchronized Singleton getInstance(){
if(instance == null){
instance = new Singleton();
}
return instance;
}
}
view raw Singleton.java hosted with ❤ by GitHub
var Singleton = (function(){
var instance;
function init(){
return {}
}
return {
getInstance: function(){
if(!instance){
instance = init();
}
return instance;
}
}
})();
view raw singleton.js hosted with ❤ by GitHub