SingleTon 要求一个类有且仅有一个实例,并提供一个全局的访问点.

it2022-05-09  27

SingleTon类  1using System; 2using System.Collections.Generic; 3using System.Text; 4 5namespace Gof.Nan.Test 6{ 7    public class SingleTon 8    { 9        private static SingleTon _singleTon;10        private SingleTon()11        { }12        public static SingleTon CreateInstance()13        {14            if (_singleTon == null)15            {16                _singleTon = new SingleTon();17            }18            return _singleTon;19        }20    }21} 测试代码 1        Gof.Nan.Test.SingleTon s1, s2;2        s1 = Gof.Nan.Test.SingleTon.CreateInstance();3        s2 = Gof.Nan.Test.SingleTon.CreateInstance();4        if (s1.Equals(s2))5        {6            Response.Write("s1 is s2");7        }

一个特定的对象承担了其个职责,而其它的对象必需依赖这个职责.当然这里我们用了(Lazy Initialization)来保证在第一次使用时再创建实例.为什么要对SingleTon进行惰性初始化:1.我们可能没有足够的信息,所以无法在某个特定的时刻实例化一个SingleTon.例如,为了创建一个Factory SingleTon,我们可能必须等待,直到实际工厂中的机器之间都建起了通信渠道.2.如果某个SingleTon对象需要一些资源,例如,一个数据库连接,那么,我们可以使用惰性初始化.另外,如果在一个会话过程中,这个应用程序不需要使用这个SingleTon,那么我们也需要使用惰性初始化.在多线程环境中进行惰性初始化时,必须防止多线程对SingleTon进行多次初始化.

支持多线程的SingleTon  1using System; 2using System.Collections.Generic; 3using System.Text; 4 5namespace Gof.Nan.Test 6{ 7    class SingleTonInMultiThread 8    { 9        private static SingleTonInMultiThread _singleTon;10        private static object _classLock = typeof(SingleTon);11        private long _wipMoves;//私有变量,表示一定的意义.12        private SingleTonInMultiThread(){13            _wipMoves = 0;14        }15        public SingleTonInMultiThread CreateInstance()16        {17            lock (_classLock)18            {19                if (_singleTon == null)20                {21                    _singleTon = new SingleTonInMultiThread();22                }23                return _singleTon;24            }25        }26        public void DoSomething()27        {28            lock (_classLock)//保证其在执行时的线程安全性29            {30                _wipMoves++;31            }32        }33    }34} The Singleton Pattern ensures a class has oly one instance, and provides a global point of access to it.

转载于:https://www.cnblogs.com/nanshouyong326/archive/2006/12/31/608545.html


最新回复(0)