1.单件模式(Singleton Pattern)

意图:为了保证一个类仅有一个实例,并提供一个访问它的全局访问点。

1.简单实现(多线程有可能产生多个实例)

    public class CommonSigleton
    {
        /// <summary>
        /// 私有的对象
        /// </summary>
        private static CommonSigleton instance;

        /// <summary>
        /// 构造方法为Private
        /// </summary>
        private CommonSigleton()
        {

        }

        /// <summary>
        /// 公有的属性
        /// </summary>
        public static CommonSigleton Instance
        {
            get
            {
                if(instance == null)
                {
                    instance = new CommonSigleton();
                }

                return instance;
            }
        }
    }

2.双重锁定实现(lock关键字)

    public class DoubLockSigleton
    {
        private static volatile DoubLockSigleton instance;

        /// <summary>
        /// 辅助锁对象,本身没有意义
        /// </summary>
        private static object syncRoot = new Object();

        /// <summary>
        /// 构造方法改为Private
        /// </summary>
        private DoubLockSigleton()
        {

        }

        public static DoubLockSigleton Instance
        {
            get
            {
                if (instance == null)
                {
                    lock (syncRoot)
                    {
                        if (instance == null)
                            instance = new DoubLockSigleton();
                    }
                }

                return instance;
            }
        }
    }

3.利用C#特性实现

    ///该类标记sealed阻止发生派生增加实例
    public sealed class DotNetSigleton
    {
        //变量标记为 readonly,这意味着只能在静态初始化期间(此处显示的示例)或在类构造函数中分配变量。
        //公共静态属性为访问实例提供了一个全局访问点。此外,由于构造函数是私有的,因此不能在类本身以外实例化
        private static readonly DotNetSigleton instance = new DotNetSigleton();

        //由于 Singleton 实例被私有静态成员变量引用,因此在类首次被对Instance属性的调用所引用之前,不会发生实例化。
        private DotNetSigleton(){}

        public static DotNetSigleton Instance
        {
            get
            {
                return instance;
            }
        }
    }

时间: 2024-12-20 00:16:38

1.单件模式(Singleton Pattern)的相关文章

设计模式 - 单件模式(singleton pattern) 详解

单件模式(singleton pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details/28595349 单件模式(singleton pattern) : 确保一个类只有一个实例, 并提供一个全局访问点. 单价模式包括3个部分: 私有构造器, 静态变量, 静态方法. 具体方法: 1. 标准的单例模式: /** * @time 2014.6.5 */ package singleton; /** * @author

Design Patterns 乌蒙山连着山外山---单件模式singleton pattern

1 //包含单件实例的类Singleton 2 public class Singleton 3 { 4 //声明用于存储单件实例的变量instance 5 private static Singleton instance; 6 //定义用于标识同步线程的对象locker 7 private static Object locker = new Object(); 8 //私有的构造函数Singleton 9 private Singleton() { } 10 //公共访问的返回单件实例的函

说说设计模式~单件模式(Singleton)

单件模式(Singleton)要求一个类有且仅有一个实例,并且提供了一个全局的访问点. 从概念上来研究一下它的实现,不考虑线程安全 1 public sealed class Singlton 2 { 3 static Singlton instance = null; 4 private Singlton() { } 6 7 public static Singlton Instance 8 { 9 get 10 { 11 if (instance == null) 12 { 13 insta

单件模式(Singleton创建型)c#简单例子

单件(Singleton创建型模式)c#简单例子 需要生成一个实例时,可采用单件模式 例子中只可生成一个玩家,并对玩家进行测试.单线程例子如下: namespace singletonpattern { public partial class SingletonForm : Form { public SingletonForm() { InitializeComponent(); } private void btnDisplay_Click(object sender, EventArgs

[MyBean-说明书]关于插件的单件模式(singleton),插件的共享模式

[说明] 单件模式是一种用于确保整个应用程序中只有一个类实例. 想想我们的系统中有哪些方面可以应用到单件模式,比如大家常说的连接(ADOConnection)共享,其实就是指的单件模式. [MyBean中的单件模式] MyBean中插件一旦成为单件模式,框架就会帮你接管对象的生命周期.你每次调用getBean都只会产生一份实例,也就是说对象只会创建一次,不管是窗体插件还是无UI的逻辑插件. MyBean中可以通过两种方式使插件成为单件模式. 1.最简单的一种是注册的时候,参数选定为单件模式,也是

设计模式(二)单件模式Singleton(创建型)

SINGLETON(单件)—对象创建型模式 几乎所有面向对象的程序中,总有一些类的对象需要是唯一的,例如,通过数据库句柄到数据库的连接是独占的.您希望在应用程序中共享数据库句柄,因为在保持连接打开或关闭时,它是一种开销.再如大家最经常用的IM,如QQ,在同一台电脑,一个帐号只能有唯一的登录. 1. 问题 怎样确保一个特殊类的实例是独一无二的(它是这个类的唯一实例),并且这个实例易于被访问呢? 2. 解决方案 1)全局变量:一个全局变量使得一个对象可以被访问,但它不能防止你实例化多个对象.因为你的

设计模式之单件模式

一.概述 /*    一般情况下,我们建立的一些类是属于工具性质的,基本不用存储太多的跟自身有关的数据,在这种情况下,每次都去new一个对象,即增加了开销,也使得代码更加臃肿.    其实,我们只需要一个实例对象就可以.如果采用全局或者静态变量的方式,会影响封装性,难以保证别的代码不会对全局变量造成影响.    考虑到这些需要,我们将默认的构造函数声明为私有的,这样就不会被外部所new了,甚至可以将析构函数也声明为私有的,这样就只有自己能够删除自己了.    在Java和C#这样纯的面向对象的语

单件模式(Singleton Pattern)(转)

概述 Singleton模式要求一个类有且仅有一个实例,并且提供了一个全局的访问点.这就提出了一个问题:如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?客户程序在调用某一个类时,它是不会考虑这个类是否只能有一个实例等问题的,所以,这应该是类设计者的责任,而不是类使用者的责任. 从另一个角度来说,Singleton模式其实也是一种职责型模式.因为我们创建了一个对象,这个对象扮演了独一无二的角色,在这个单独的对象实例中,它集中了它所属类的所有权力,同时它也肩负了行使这种权力的职责! 意图

C#设计模式:Singleton Pattern 单件(例)模式 -- 创建独一无二的对象

这里写的代码,相当于<Head First 设计模式>的读书笔记,原书是java的,自己在学习的过程中将其翻译为C#: (一)剖析经典的单件模式实现 单件模式 -- 确保一个类只有一个实例,并提供一个全局访问点 -- 单件模式的类图可以说是所有模式的类图中最简单的 -- 有一些对象其实我们只需一个,如线程池.缓存.对话框.处理偏好设置和注册表的对象.日志对象和充当打印机.显卡等设备的驱动程序的对象等.如果制造出多个实例,可能导致许多问题,如程序的行为异常.资源使用过度,或者结果不一致等 1.新