interface IStateGUI
{
}
class GUIDisconnected: IStateGUI
{
private static GUIDisconnected Instance = null;
private static Object Sync = new Object();
public int Parameter { get; private set; }
private GUIDisconnected()
{
}
private GUIDisconnected(int _parameter)
{
this.Parameter = _parameter;
}
public static GUIDisconnected GetInstance(int _parameter)
{
if (GUIDisconnected.Instance == null)
{
lock (Sync)
{
if (GUIDisconnected.Instance == null)
GUIDisconnected.Instance = new GUIDisconnected(_parameter);
}
}
return GUIDisconnected.Instance;
}
}
Кроме GUIDisconnected есть еще куча классов, реализующих IStateGUI. Можно ли каким-нибудь способом избежать копипаста статических методов этого класса? Так как эти методы по сути будут различаться только идентификатором класса (GUIDisconnected). Пытался применить шаблоны, но как то не сложилось. Еще проблема в том, что Instance и Sync тоже статические, вобщем наследование тут как-то не катит...
Здравствуйте, Eldar9x, Вы писали:
E>Кроме GUIDisconnected есть еще куча классов, реализующих IStateGUI. Можно ли каким-нибудь способом избежать копипаста статических методов этого класса? Так как эти методы по сути будут различаться только идентификатором класса (GUIDisconnected). Пытался применить шаблоны, но как то не сложилось. Еще проблема в том, что Instance и Sync тоже статические, вобщем наследование тут как-то не катит...
Попробуйте решить вашу задачу без синглетонов.
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, Eldar9x, Вы писали:
E>Допустим есть примерно такая схема:
А какой смысл имеет такая схема?
В частности, для какой цели сделано так, что клиент не может полагаться на сохранение "очевидных" инвариантов вроде:
GUIDisconnected.GetInstance(42).Parameter == 42
?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, Eldar9x, Вы писали:
E>>Допустим есть примерно такая схема: S>А какой смысл имеет такая схема? S>В частности, для какой цели сделано так, что клиент не может полагаться на сохранение "очевидных" инвариантов вроде: S>
Схема была приведена только, чтобы понять как в родителе сохранить статические методы и использовать их потом в наследниках.
Реальная схема даже проще. Там просто статическое поле объявлено:
public static GUIDisconnected Instance = new GUIDisconnected();
Ну так вот, сделал через шаблоны. Класс Родитель-Шаблон, который хранит статические поля и реализует интерфейс. И наследники этого класса. Никакого копипаста. А общее поле в родителе вообще инициализирую перед стартом.