一、为何需要单件模式

  1. 需求

    我们开发了一个大型的项目,其中存在许多的工具类。但是其中很多的工具类我们并不是经常使用得到,甚至

    一次都不会使用。但是这些工具类都是静态的类,会消耗很多的内存,即使一次都不使用。这个时候我们需要一种

    方式可以解决这个问题。意指只有我们使用到这个工具类的时候才实例化,并且在以后的使用中总是返回首次实例

    化的对象而不是重复的实例化新的对象。

  2. 方案

    我们采取的方案是将类默认的构造方法设置为保护类型,这样使用者就无法直接实例化这个类,然后我们在公开一

    个静态的方法,用于将本身返回给使用者。其中涉及判断当前的类是否已经被实例化的逻辑代码,如果当前的类已

    经被实例化,则直接返回自身。否则实例化自身并保存进一个私有的静态变量中,以便以后使用的时候返回对象。

  3. 设计

    下面是该类的大概轮廓:

     public class SingletonPattern
    {
    private static SingletonPattern _self; protected SingletonPattern()
    {
    } public static SingletonPattern GetInstance()
    {
    if (_self == null)
    {
    _self = new SingletonPattern();
    }
    return _self;
    }
    }

    其中就已经实现了简单的单件模式。

二、模式思想

  1. 通过将默认的构造方法的访问属性设置为保护类型或者私有类型从而可以阻止用户主动去实例化该类。

    相关代码如下:

     protected SingletonPattern()
    {
    }
  2. 通过一个私有的本身类型的变量保存实例化后的本身。

    相关代码如下:

     private static SingletonPattern _self;
  3. 公开一个静态的方法用于给用户获取该类的实例。

    相关代码如下:

     public static SingletonPattern GetInstance()
    {
    }
  4. 获取实例的方法中通过判断当前是否已经保存了这个类的实例从而决定是否实例化本身。

    相关代码如下:

     public static SingletonPattern GetInstance()
    {
    if (_self == null)
    {
    _self = new SingletonPattern();
    }
    return _self;
    }

三、结束语

单件模式算是23中设计模式中最为简单的,我想这里大家理解的应该也很快速。后面我会陆续介绍所有的23种设计模式以及ASP.NET开发的设计模式。

读过之前的抽象工厂模式的人一定会发觉这篇与前一篇的组织上有很大的差异。因为我也是在学习中,从而不断的积累。自然而然表达的方式会朝着更好更

具体的方向前进,而不是成为代码的搬运工。

C#设计模式——单件模式的更多相关文章

  1. NET中的设计模式---单件模式

    如众所知,单件模式做为<Gof 23中设计模式>之一,其意图仅允许单件类的一个实例存在(扩展单件模式不在此文范围内),并提供全局的访问方法.UML类图如下. http://csharpin ...

  2. C#设计模式——单件模式(Singleton Pattern)

    一.概述在软件开发过程中,我们有时候需要保证一个类仅有一个实例,比如在一个电脑用户下只能运行一个outlook实例.这时就需要用到单件模式.二.单件模式单件模式保证一个类仅有一个实例,并提供一个访问它 ...

  3. 设计模式 - 单件模式(singleton pattern) 具体解释

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u012515223/article/details/28595349 单件模式(singleton ...

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

    单件模式(Singleton)要求一个类有且仅有一个实例,并且提供了一个全局的访问点. 从概念上来研究一下它的实现,不考虑线程安全 1 public sealed class Singlton 2 { ...

  5. .NET设计模式(2):单件模式(Singleton Pattern)

    转载:http://terrylee.cnblogs.com/archive/2005/12/09/293509.html 单件模式(Singleton Pattern) --.NET设计模式系列之二 ...

  6. NET设计模式(2):单件模式(Singleton Pattern)[转载]

    单件模式(Singleton Pattern) ——.NET设计模式系列之二 Terrylee,2005年12月07日 概述 Singleton模式要求一个类有且仅有一个实例,并且提供了一个全局的访问 ...

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

    SINGLETON(单件)—对象创建型模式 几乎所有面向对象的程序中,总有一些类的对象需要是唯一的,例如,通过数据库句柄到数据库的连接是独占的.您希望在应用程序中共享数据库句柄,因为在保持连接打开或关 ...

  8. .NET设计模式 第二部分 创建型模式(1)—:单件模式(Singleton Pattern)

    单件模式(Singleton Pattern) ——.NET设计模式系列之二 Terrylee,2005年12月07日 概述 Singleton模式要求一个类有且仅有一个实例,并且提供了一个全局的访问 ...

  9. php设计模式总结-单件模式

    一.单件模式 英文叫做sington.其他语言中有叫做单例模式,其实都是一样的道理.保证只会出现单个实例,所以是单例.翻译成单件,永远只会产生一件,呵呵. 还有翻译成单元素模式.其实关键是看这个英文比 ...

随机推荐

  1. Angular $http解析通过接口获得的json数据

    刚接触angular不久,对很多东西都不了解,今天需要用angular通过接口得到json数据,折腾了好久,总算是能获取到数据了,下面是部分源码,仅供参考: HTML部分: <body ng-a ...

  2. 机器学习中的算法——决策树模型组合之随机森林与GBDT

    前言: 决策树这种算法有着很多良好的特性,比如说训练时间复杂度较低,预测的过程比较快速,模型容易展示(容易将得到的决策树做成图片展示出来)等.但是同时,单决策树又有一些不好的地方,比如说容易over- ...

  3. Java中的容器

    参考链接:Java容器与泛型(1) 认识容器,Java容器与泛型(2) ArrayList.LinkedList和Vector比较,Java容器与泛型(3) Hashset.TreeSet和Linke ...

  4. oracle sql优化

    整理一下网上所看到sql优化方法 1.使用大写字母书写sql,因为oracle解释器会先将sql语句转换成大写后再解释 2    减少访问数据库的次数,多数情况下一条sql可以达到目的的,就不要使用多 ...

  5. Spring 通过工厂配置Bean

    1.通过静态工厂方法配置Bean 要声明通过静态方法创建的 Bean, 需要在 Bean 的 class 属性里指定拥有该工厂的方法的类, 同时在 factory-method 属性里指定工厂方法的名 ...

  6. 手把手教你用axis1.4搭建webservice(转)

    1.先下载axis jar包:axis-bin-1_4.zip.下载地址: http://ws.Apache.org/axis/. 当然这个包其实是不全面的,像activation.jar之类的,完全 ...

  7. collectionView使用细节

    1.//创建组头组尾一个方法 - (UICollectionReusableView *)stCollectionView:(UICollectionView *)collectionView vie ...

  8. 常见算法是js实现汇总(转载)

    常见算法是js实现汇总 /*去重*/ <script> function delRepeat(arr){ var newArray=new Array(); var len=arr.len ...

  9. css小tip

    1. <input>标签的默认样式 当在页面中添加一个input标签,当点击输入框时会有一个外边框包裹着,可以使用 : input { outline: none} 去除点击时产生的外边框 ...

  10. Android 环境通过国内映像快速搭建

    Android 环境通过国内映像快速搭建 转眼大半年没有写android程序了,回顾从环境搭建开始. 因为google受国内限制,因此下载android的SDK相当慢,因此寻找国内的镜像进行搭建. 首 ...