Changes

Jump to: navigation, search

Singleton

1,997 bytes added, 10:52, 2 April 2007
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==
class Singletonpattern in C#:<pre>// Singleton pattern -- Real World example  using System;using System.Collections;using System.Threading; namespace DoFactory.GangOfFour.Singleton.RealWorld
{
private static Singleton instance; // MainApp test application
// Note: Constructor is 'protected' protected Singleton() class MainApp
{
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();
}
}
public static // "Singleton Instance()"   class LoadBalancer
{
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)
{
instance = new Singleton// List of available servers servers.Add("ServerI"); servers.Add("ServerII"); servers.Add("ServerIII"); servers.Add("ServerIV"); servers.Add("ServerV");
}
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]]
1
edit

Navigation menu