设计模式总结—单例模式
2013-04-11 10:05
190 查看
单例模式定义是保证一个类仅有一个实例,并提供一个访问它的全局访问点。
简单的来说单例模式包括3点内容:
1.该类只有一个实例
2.在该类内部创建自身的实例对象
3.向整体系统公开这个实例接口(全局访问点)
单例模式分为懒汉式单例类和饿汉式单例类。
首先我们来看下懒汉式单例类,它是说对象要在第一次被引用时,才会将自己实例化,懒汉式单例类又分为单线程和多线程两种,我们就依次来看下。第一个是单线程时的懒汉式单例类的代码。
classSingleton
{
privatestatic Singleton instance;
//利用private保证了外界无法用new创建此类实例
privateSingleton()
{ }
//获取本类实例的唯一全局访问点
publicstatic Singleton GetInstance()
{
//若实例不存在,则new一个新实例,否则返回已有实例
if(instance == null)
{
instance = new Singleton();
}
return instance;
}
}
接下来我们来看下多线程时的单例代码,
class Singleton
{
privatestatic Singleton instance;
//程序运行时创建一个静态只读的进程辅助对象
privatestatic readonly object syncRoot = new object();
privateSingleton()
{ }
publicstatic Singleton GetInstance()
{
if(instance == null)//先判断实例是否存在,不存在再加锁处理
{
lock (syncRoot)
{
if (instance == null)
{
instance = new Singleton();
}
}
}
return instance;
}
}
而饿汉式单例类是通过静态初始化的方式在自己被加载时就将自己实例化。下面我们也来看下它的代码:
public sealed class Singleton
{
//在第一次引用类的任何成员时创建实例,公共语言运行库复杂处理变量初始化。
privatestatic readonly Singleton instance = new Singleton();
privateSingleton() { }
publicstatic Singleton GetInstance()
{
return instance;
}
}
对于懒汉式和饿汉式各有不同,由于懒汉式,即静态初始化的方法,它是类一加载就实例化的对象,所以要提前占用系统资源,然后懒汉式又会面临多线程访问的安全性问题,需要双重锁定这样的处理才可以保证安全,所以到底使用哪一种方式,取决于实际的需求。
最后我们在来看下单例模式的类图:
简单的来说单例模式包括3点内容:
1.该类只有一个实例
2.在该类内部创建自身的实例对象
3.向整体系统公开这个实例接口(全局访问点)
单例模式分为懒汉式单例类和饿汉式单例类。
首先我们来看下懒汉式单例类,它是说对象要在第一次被引用时,才会将自己实例化,懒汉式单例类又分为单线程和多线程两种,我们就依次来看下。第一个是单线程时的懒汉式单例类的代码。
classSingleton
{
privatestatic Singleton instance;
//利用private保证了外界无法用new创建此类实例
privateSingleton()
{ }
//获取本类实例的唯一全局访问点
publicstatic Singleton GetInstance()
{
//若实例不存在,则new一个新实例,否则返回已有实例
if(instance == null)
{
instance = new Singleton();
}
return instance;
}
}
接下来我们来看下多线程时的单例代码,
class Singleton
{
privatestatic Singleton instance;
//程序运行时创建一个静态只读的进程辅助对象
privatestatic readonly object syncRoot = new object();
privateSingleton()
{ }
publicstatic Singleton GetInstance()
{
if(instance == null)//先判断实例是否存在,不存在再加锁处理
{
lock (syncRoot)
{
if (instance == null)
{
instance = new Singleton();
}
}
}
return instance;
}
}
而饿汉式单例类是通过静态初始化的方式在自己被加载时就将自己实例化。下面我们也来看下它的代码:
public sealed class Singleton
{
//在第一次引用类的任何成员时创建实例,公共语言运行库复杂处理变量初始化。
privatestatic readonly Singleton instance = new Singleton();
privateSingleton() { }
publicstatic Singleton GetInstance()
{
return instance;
}
}
对于懒汉式和饿汉式各有不同,由于懒汉式,即静态初始化的方法,它是类一加载就实例化的对象,所以要提前占用系统资源,然后懒汉式又会面临多线程访问的安全性问题,需要双重锁定这样的处理才可以保证安全,所以到底使用哪一种方式,取决于实际的需求。
最后我们在来看下单例模式的类图:
相关文章推荐
- 设计模式 - 总结篇
- 常用设计模式总结--组合模式
- 总结 - 设计模式,企业应用架构模式,架构模式
- 设计模式学习总结
- 【HeadFirst 设计模式总结】1.策略模式
- iOS中常用开发设计模式总结
- 【总结】 - 设计模式之MVC模式
- 设计模式总结——2.5抽象工厂模式
- DAO设计模式总结
- JavaSE学习总结第27天_反射 & 设计模式 & JDK5、7、8新特性
- 设计模式学习总结10 - 行为型5 - State状态模式
- Java基础学习总结(8)——Java23种设计模式(Design Patterns)详解
- 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结
- 马士兵设计模式讲座总结(1)
- 【软考总结】设计模式之结构型
- 设计模式—单例设计模式总结
- 设计模式(八)——工厂模式总结
- Net设计模式实例系列文章总结
- 设计模式原则总结--读《大话设计模式》有感
- 设计模式总结