设计模式-单例模式
来源:互联网 发布:大数据 数据仓库 编辑:程序博客网 时间:2024/05/22 12:28
单例模式(Singleton),保证类仅有一个实例,并提供一个访问它的全局访问点.
通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象.一个最好的办法就是让类自身负责保存它的唯一实例.这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法.
//客户端代码 static void Main(string[] args) { Singleton s1 = Singleton.GetInstance(); Singleton s2 = Singleton.GetInstance(); if (s1 == s2) //比较两次实例化后对象的结果是实例相同 { Console.WriteLine("两个对象时相同的实例。"); } Console.Read(); }
//单例模式的类 class Singleton { private static Singleton instance; private Singleton() //构造方法让其private,这就堵死了外界利用new创建此类实例的可能 { } public static Singleton GetInstance()//此方法是获得本类实力的唯一全局访问点 { if (instance == null) //若实力不存在,则new一个新实例,否则返回已有的实例 { instance = new Singleton(); } return instance; } }通过单例模式可以保证系统中一个类只有一个实例,而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源,如果希望在系统中某个类的对象只能存在一个,就用单例模式来解决就好了。
但是,在多线程程序中,多个线程同时,注意是访问Singleton类,调用GstInstance()方法,会有可能造成创建多个实例的。多以需要给进程一把锁来处理。
//多线程时的单例 private static Singleton instance; private static readonly object syncRoot = new object();//程序运行时创建一个静态制度的进程辅助对象 private Singleton() { } public static Singleton GetInstance() { lock (syncRoot)//在同一个时刻加了锁的那部分程序只有一个线程可以进入 { if (instance == null) { instance = new Singleton(); } } return instance;Lock确保当一个线程位于代码的临界区时,另一盒线程不进入临界区。如果其他线程试图进入锁定的代码,则他将一直等待,只带该对象被释放。
单例模式的优点:1、实例控制:单例模式会阻止其对象实例化自己的单例对象的副本,congenial确保所有对象都访问一个实例。
2、灵活性:因为类控制了实例化过程,所以类可以灵活更改实例化过程。
28 0
- 设计模式------单例模式
- 设计模式------单例模式
- 设计模式-单例模式
- 设计模式 - 单例模式
- 设计模式---单例模式
- 设计模式---单例模式
- 【设计模式】单例模式
- 设计模式-单例模式
- 设计模式----单例模式
- 设计模式--单例模式
- 设计模式-单例模式
- 设计模式-单例模式
- [设计模式] 单例模式
- 设计模式--单例模式
- 设计模式---单例模式
- 设计模式--单例模式
- 设计模式 -----单例模式
- 设计模式:单例模式
- ios开发教程中的一些小技巧
- VC 所有的窗口样式
- Library Search Paths
- 基于MODIS影像反演气溶胶
- java入门:文件操作
- 设计模式-单例模式
- 如何成为一个偷懒又高效的Android开发人员
- ON_COMMAND与ON_UPDATE_COMMAND_UI
- Hibernate 链接
- 手机文件删除后怎么恢复
- 重大发现
- 一股幽香袭来,她依偎在我怀中
- C++ STL--stack/queue 的使用方法
- webservice的搭建(以cxf为例)