首页 > 代码库 > 跟刺猬哥一起学习设计模式【Singleton模式】
跟刺猬哥一起学习设计模式【Singleton模式】
设计模式的分类
从目的来看:
创建型模式:负责对象创建
结构性模式:处理类与对象间的组合
行为型模式:类与对象交互中的职责分配
从范围来看:
类模式处理类与子类的静态关系
对象模式处理对象间的动态关系
动机
在软件系统中,经常有这样的一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性以及良好的效率。
如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例呢?其实这应该是类设计者的责任,而不是使用者的责任。
意图
保证一个类仅有一个实例,并提供一个该实例的全局访问点。 -----《设计模式》 Gof
单线程Singleton 模式实现
public class Singleton{ private static Singleton instance; private Singleton() {} public static Singleton Instance { get { if(instance == null) { instance = new Singleton(); } return instance; } }}
单线程Singleton模式有以下几个要点:
Singleton模式中的实例构造器可以设置为protected以允许子类派生。
Singleton模式一般不要支持ICloneable接口,因为这可能会导致多个对象实例,与模式初衷违背。
Singleton模式一般不要支持序列化,因为这也有可能导致多个对象实例,与初衷违背。
Singleton模式只考虑了对象创建的管理,没有考虑对象销毁的管理。就支持垃圾回收的平台和对象的开销来讲,一般没有必要对其销毁进行特护的管理。
不能应对多线程环境,在多线程环境下,使用可能得到多个实例对象。
二、多线程下的Singleton模式
public class Singleton{ private static volatile Singleton _instance=null; private static readonly object syslock = new object(); private Singleton() {} public static Singleton Instance() { if (_instance == null) { lock (syslock) { if (_instance == null) { _instance = new Singleton(); } } } return _instance; }
}
跟刺猬哥一起学习设计模式【Singleton模式】
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。