4、 instance = new Singleton(); return instance; }}/**//// /// Client test/// public class Client{ public static void Main() { // Constructor is protected -- cannot use new Singleton s1 = Singleton.Instance(); Singleton s2 = Singleton.Instance(); if( s
5、1 == s2 ) Console.WriteLine( "The same instance" ); }四、 在什么情形下使用单例模式:使用Singleton模式有一个必要条件:在一个系统要求一个类只有一个实例时才应当使用单例模式。反过来,如果一个类可以有几个实例共存,就不要使用单例模式。注意:不要使用单例模式存取全局变量。这违背了单例模式的用意,最好放到对应类的静态成员中。不要将数据库连接做成单例,因为一个系统可能会与数据库有多个连接,并且在有连接池的情况下,应当尽可能及时释放连接。Singleton模式由于使用静态成员存储类实例,所以可能会造成资源
6、无法及时释放,带来问题。五、 Singleton模式在实际系统中的实现6信息技术分院软件技术教研室《软件设计(高级)》下面这段Singleton代码演示了负载均衡对象。在负载均衡模型中,有多台服务器可提供服务,任务分配器随机挑选一台服务器提供服务,以确保任务均衡(实际情况比这个复杂的多)。这里,任务分配实例只能有一个,负责挑选服务器并分配任务。// Singleton pattern -- Real World example using System;using System.Collections;using System.Threading;// "Sing
7、leton"class LoadBalancer{ // Fields private static LoadBalancer balancer; private ArrayList servers = new ArrayList(); private Random random = new Random(); // Constructors (protected) protected LoadBalancer() { // List of available servers servers.Add( "ServerI" ); s