这也与Singleton模式的初衷违背

时间:2021-08-07 05:53:17

原文:C#设计模式之一单例模式(Singleton Pattern)【创建型】

一、引言

     看了李建忠老师的讲的设计模式已经有一段时间了(这段时间概略有一年多了),本身还没有写过本身的、有关设计模式的文章。此次想写一些关于设计模式的文章,用本身的理解和代码来写,算是温习一遍。写作的过程中也会多看看其他大牛的文章,争取让本身的理解正确,否则把大家带跑偏了,就是我的过错了。今天就开始我们第一个设计模式,该模式是:【单例模式】,英文名称:Singleton Pattern,这个模式很简单,一个类型只需要一个实例,他是创建型的设计模式。为什么叫“创建型”设计模式呢,因为他们有分类。固然了分类的方法不一样,分类的功效也就不一样。

    从目的来看:

       -创建型(Creational)模式:卖力东西创建

       -布局型(Structural)模式:措置惩罚惩罚类与东西间的组合

       -行为型(Behavioral)模式:类与东西交互中的职责分配

从范畴来看:

      -类模式措置惩罚惩罚类与子类的静态关系

      -东西模式措置惩罚惩罚东西间的动态关系

以上就是分类的方法,我们按大大都的分类,给与“从目的来看”的分类来对设计模式进行分类,我们就开始今天的学习吧。

二、单例模式的介绍

   2.1、动机(Motivate)

在软件系统中,经常有这样一些特殊的类,必需保证它们在系统中只存在一个实例,才华确保它们的逻辑正确性、以及良好的效率。

     如何绕过通例的结构器,供给一种机制来保证一个类只有一个实例?

         这应该是类设计者的责任,而不是使用者的责任

2.2、意图(Intent)

保证一个类仅有一个实例,并供给一个该实例的全局访谒点。                                   --《设计模式GoF》

2.3、布局图(Structure)

这也与Singleton模式的初衷违背

2.4、模式的构成

(1)、单件实例(Singleton):这个模式里面只有一个类型,就是Singleton类型,并且这个类只有一个实例,可以通过Instance()要领获取该类型的实例。

2.5、单件模式的代码实现

         既然是单实例,,必定会涉及到多线程的问题,我们就一步一步的来写代码,我们先看看单线程Singleton模式的实现,代码如下:

1 /// <summary> 2 /// 单例模式的实现 3 /// </summary> 4 public sealed class Singleton 5 { 6 // 界说一个静态变量来生存类的实例 7 private static Singleton uniqueInstance; 8 9 // 界说私有结构函数,使外界不能创建该类实例 10 private Singleton() 11 { 12 } 13 14 /// <summary> 15 /// 界说公有要领供给一个全局访谒点,同时你也可以界说公有属性来供给全局访谒点 16 /// </summary> 17 /// <returns></returns> 18 public static Singleton GetInstance() 19 { 20 // 如果类的实例不存在则创建,否则直接返回 21 if (uniqueInstance == null) 22 { 23 uniqueInstance = new Singleton(); 24 } 25 return uniqueInstance; 26 } 27 }


    私有的实例结构器是屏蔽外界的挪用,上面的单例模式的实此刻单线程下确实是完美的,也很好的满足了我们单线程环境的需求。