1
edit
Changes
→Sample Code
[[BTP600 | Go Back Pattern List]]
==Introduction==
Singleton pattern Ensure a class only has one instance, and provide a global point of access to it. This is useful when exactly one object is needed to coordinate actions across the system.
==Sample Code==
{
{
static void Main()
{
LoadBalancer b1 = LoadBalancer.GetLoadBalancer();
LoadBalancer b2 = LoadBalancer.GetLoadBalancer();
LoadBalancer b3 = LoadBalancer.GetLoadBalancer();
LoadBalancer b4 = LoadBalancer.GetLoadBalancer();
// Same instance?
if (b1 == b2 && b2 == b3 && b3 == b4)
{
Console.WriteLine("Same instance\n");
}
// All are the same instance -- use b1 arbitrarily
// Load balance 15 server requests
for (int i = 0; i < 15; i++)
{
Console.WriteLine(b1.Server);
}
// Wait for user
Console.Read();
}
}
{
private static LoadBalancer instance; private ArrayList servers = new ArrayList(); private Random random = new Random(); // Use 'Lazy initialization' Lock synchronization object if private static object syncLock = new object(); // Constructor (protected) protected LoadBalancer(instance == null)
{
}
public static LoadBalancer GetLoadBalancer() { // Support multithreaded applications through // 'Double checked locking' pattern which (once // the instance exists) avoids locking each // time the method is invoked if (instance == null) { lock (syncLock) { if (instance == null) { instance = new LoadBalancer(); } } } return instance; } // Simple, but effective random load balancer public string Server { get { int r = random.Next(servers.Count); return servers[r].ToString(); } }
}
}</pre> ==References==http://en.wikipedia.org/wiki/Singleton_pattern<br/>http://www.dofactory.com/Patterns/PatternSingleton.aspx<br/><br/>[[BTP600 | Go Back Pattern List]]