一、为何需要单件模式

  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. sqlserver复制报”应用复制的命令时在订阅服务器上找不到该行“解决方法

    最近遇到“应用复制的命令时在订阅服务器上找不到该行”问题,报错如下: 官方给出的建议是重新同步和初始化订阅,当然,这是一种选择,但是对于动辄上百G的生产库,这种方法会消耗大量的资源和时间.可以通过定位 ...

  2. Hibernate day02笔记

      对象状态与一级缓存 状态介绍 hibernate 规定三种状态:瞬时态.持久态.脱管态 状态     瞬时态:transient,session没有缓存对象,数据库也没有对应记录.         ...

  3. C# JSON to object

    /// <summary> /// json格式转换(引用System.Web.Extension类库) /// </summary> /// <param name=& ...

  4. 计算机网络 学习笔记-传输层:TCP协议简介

    概述: TCP传输前先要建立连接 TCP在传输层 点对点,一条TCP只能连接两个端点 可靠传输.无差错.不丢失.不重复.按顺序 全双工 字节流 TCP报文段 TCP报文段的报头前20字节是固定的,后面 ...

  5. Oracle SQL: TO_CHAR and TO_NUMBER 笔记

    (1)select TO_CHAR(123.56,'999.9') from dual; will return 123.6select TO_NUMBER('123.56','999.9') fro ...

  6. JavaWeb 输出九九乘法表,三角形,菱形

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  7. css 透明(transparent)

    opacity :  .75;     //standard css3 style for transparency -moz-opacity : .75;        // transparenc ...

  8. SQLServer2008R2 mdf文件还原数据库

    偶然遇到要用mdf文件restore数据库,试了2个小时才弄出来,百度查出来的我试了都不太好用,或者是我没理解. 下面把我用的记录一下,以防忘记. 工具:SQLServer 2008R2 步骤: 1. ...

  9. Light OJ 1019 - Brush (V)(图论-dijkstra)

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1019 题目大意:Tanvir想从节点1的位置走到节点n的位置, 输出最短距离, ...

  10. ios9 http请求不能使用

    为了跟新新版本的ios9版本,使用http请求时会碰到无法加载数据的情况 App Transport Security has blocked a cleartext HTTP (http://) r ...