// Singleton
// Intent: "Ensure a class only has one instance, and provide a global
// point of access to it".
// For further information, read "Design Patterns", p127, Gamma et al.,
// Addison-Wesley, ISBN:0-201-63361-2
/* Notes:
* If it makes sense to have only a single instance of a class (a so-called
* singleton), then it makes sense to enforce this (to elimintate potential
* errors, etc).
*
* A class based on the singleton design pattern protects its constructor,
* so that only the class itself (e.g. in a static method) may instantiate itself.
* It exposes an Instance method which allows client code to retrieve the
* current instance, and if it does not exist to instantiate it.
*/
namespace Singleton_DesignPattern
{
using System;
class Singleton
{
private static Singleton _instance;
public static Singleton Instance()
{
if (_instance == null)
_instance = new Singleton();
return _instance;
}
protected Singleton() { }
// Just to prove only a single instance exists
private int x = 0;
public void SetX(int newVal) { x = newVal; }
public int GetX() { return x; }
}
///
/// Summary description for Client.
///
public class Client
{
public static int Main(string[] args)
{
int val;
// can't call new, because constructor is protected
Singleton FirstSingleton = Singleton.Instance();
Singleton SecondSingleton = Singleton.Instance();
// Now we have two variables, but both should refer to the same object
// Let's prove this, by setting a value using one variable, and
// (hopefully!) retrieving the same value using the second variable
FirstSingleton.SetX(4);
Console.WriteLine("Using first variable for singleton, set x to 4");
val = SecondSingleton.GetX();
Console.WriteLine("Using second variable for singleton, value retrieved = {0}", val);
return 0;
}
}
}