Шаблон проектирования Singleton


На главную
Содержание

Используется для создания объекта класса в единственном экземпляре. Если создан один объект данного класса, дальнейшие попытки создания объектов этого класса не дадут никаких результатов. Это обеспечивается за счет присутствия в классе статической переменной, которая указывает, был ли уже создан экземпляр класса.

E. Gamma, R. Helm, R. Johnson, J. Vlissides описывают шаблон Singleton следующим образом: шаблон Singleton "проверяет что класс имеет только один экземпляр и обеспечивает глобальную точку доступа к нему".

Схема взаимодействия классов:
Классы шаблона Singleton



Реализация на C++

class Singleton {
private:
static Singleton* instance_;
int x;

protected:
Singleton(): x(0){}

public:
static Singleton* Instance() {
if (instance_ == 0) {
instance_ = new Singleton();
}
return instance_;
}
void SetX(int newVal) {x = newVal;}
int GetX()const {return x;}
};
Singleton* Singleton::instance_ = 0;
int main() {
int val;
SingletonTest* pFirstSingleton = SingletonTest::Instance();
SingletonTest* pSecondSingleton = SingletonTest::Instance();

pFirstSingleton->SetX(4);
cout << "Using the 1st singleton, set x to 4\n";

val = pSecondSingleton->GetX();
cout << "Variable from the 2nd singleton = " << val << '\n';
return 0;
}


Реализация на C#
class Singleton {
private static Singleton instance_;

public static Singleton Instance() {
if (instance_ == null)
instance_ = new Singleton();
return instance_;
}
protected Singleton(){}

private int x = 0;
public void SetX(int newVal) {x = newVal;}
public int GetX(){return x;}
}
public class Client {
public static int Main(string[] args) {
int val;
Singleton FirstSingleton = Singleton.Instance();
Singleton SecondSingleton = Singleton.Instance();

FirstSingleton.SetX(4);
Console.WriteLine("Using the 1st singleton, set x to 4");

val = SecondSingleton.GetX();
Console.WriteLine("Value from the 2nd singleton = {0}", val);
return 0;
}
}

Содержание
На главную

Rambler's Top100
Хостинг от uCoz