一、为何需要单件模式

  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. C# 集合与泛型

    一.古典集合方式 在C#2.0的时候集合主要通过两种方式实现: 1.使用ArrayList实现 新建ArrayList,然后将所有对象放入该数组中,简单直接,但缺点是该数组什么类型的元素都能接收,在实 ...

  2. nginx 命令

    nginx 命令 sudo /etc/init.d/nginx configtest     测试是否配置有错 sudo /usr/local/nginx/sbin/nginx -s reload   ...

  3. 《算法设计手册》面试题解答 第五章:图的遍历 附:DFS应用之找挂接点

    第五章面试题解答 5-31. DFS和BFS使用了哪些数据结构? 解析: 其实刚读完这一章,我一开始想到的是用邻接表来表示图,但其实用邻接矩阵也能实现啊?后来才发现应该回答,BFS用队列实现:DFS可 ...

  4. left join ,right join ,inner join ,cross join 区别

    left join ,right join ,inner join ,cross join 区别(参考:http://zhidao.baidu.com/link?url=gpOl9HXZR0OrQuy ...

  5. javascript中的innerHTML是什么意思,怎么个用法?

    innerHTML在JS是双向功能:获取对象的内容 或 向对象插入内容:如:<div id="aa">这是内容</div> ,我们可以通过 document ...

  6. js 和 c# 方法互调

    js访问c#代码 1  js <script type="javascript"><%=test()%></script> c#  public ...

  7. c语言知识点

    1.在c语言中,函数,声明,调用的类型务必是一致的, 2.主机id:指ip地址最后一个字节,例如,203.86.61.106,---->106指主机id, 3,端口号:6789,换成16进制1A ...

  8. 一款好用的杀毒软件-pchunter64

    360真是猛,用system权限运行了一坨后台进程.今天清理系统盘想删掉360发现根本没权限.进程又杀不掉. 最后使用 pchuter64 强行干掉了360 避免了 重装系统的尴尬.360作为世界第一 ...

  9. mysql学习(二)

    (1)存储过程:存储过程是SQL语句和控制语句的预编译集合,以一个名称存储并作为一个单元处理: (2)存储过程优点:增强SQL语句的功能和灵活性,实现较快的执行速度,减少网络流量: (3)存储过程结构 ...

  10. C++主要数据类型在计算机中所占字节大小

    遇到了数据存储的大端和小端问题,这你妹的看的一头雾水,发现我基本知识严重匮乏啊,先了解C++各数据类型在自己机子上占多少字节吧,以及这些数据类型所占字节大小与神马有关.各种查资料然后写代码检验,小结于 ...