C#设计模式学习之【单例模式】

转载 2015年07月08日 15:48:18

原版地址: http://www.unitymanual.com/blog-27799-3016.html

设计模式学习笔记_单例模式(Singleton)

 

单例模式(Singleton)概述:

单例模式是一种常用的软件设计模式。在它的核心结构种只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。

 

定义:

要求一个类有且仅有一个实例,并且提供了一个全局的访问点,在同一时刻只能被一个线程所访问。

 

特点:

²  单例类只能有一个实例。

²  单例类必须自身创建唯一实例。

²  单例类必须给所有其他对象提供唯一实例。

 

使用频率:

4星

 

单例模式结构图:

参与者:

Singleton:被调用的单例对象;

                   在单例模式中,通常由Instance()或GetInstance()方法负责对象的创建,该方法应该保证每个需要单例对象的客户端均能访问。

 

单例模式结构实现:

²  单例类有一个私有的无参数构造函数,这可以防止被其他类实例化,而且单例类也不应该被继承,如果单例类允许继承那么每个子类都可以创建实例,这就违背了单例模式的“唯一实例”原则。

²  单例类使用sealed修饰,可以阻止被继承。

²  使用一个公有的静态方法来获取单一实例的引用,如果实例为NULL即创建一个。

 

 

1、      /// <summary>

2、      /// 单例模式

3、      /// 单例类

4、      /// </summary>

5、      public sealed class Singleton

6、      {

7、          private static Singleton _instance;

8、   

9、          public Singleton()

10、         {

11、         

12、         }

13、         //提供外部调用函数

14、         public static Singleton Instance()

15、         {

16、             if (_instance == null)

17、             {

18、                 _instance = new Singleton;

19、             }

20、             return _instance;

21、         }

22、  

23、     }

24、     /// <summary>

25、     /// 客户端调用

26、     /// </summary>

27、     public class Client

28、     {

29、         static void Main(string[] args)

30、         {

31、             

32、             Singleton s1 = Singleton.Instance();

33、             Singleton s2 = Singleton.Instance();

34、  

35、             if (s1 == s2)

36、             {

37、                 Console.WriteLine("对象为相同实例");

38、                 //输出 对象为相同实例

39、             }

40、  

41、         }

42、}

 

单例模式实例:

Word文档在同一时间只能有一个用正在编辑

 

1、      /// <summary>

2、      /// 单例模式

3、      /// 单例类

4、      /// </summary>

5、      public sealed class Singleton

6、      {

7、          private static Singleton _instance;

8、          //防止被new实例话

9、          private Singleton()

10、         {

11、         

12、         }

13、         //提供外部调用函数

14、         public static Singleton Instance()

15、         {

16、             if (_instance == null)

17、             {

18、                 _instance = new Singleton;

19、                 Console.WriteLine("Word文档打开成功,可写入");

20、             }else

21、             {

22、                 Console.WriteLine("Word文档锁定,不可写入");

23、             }

24、             return _instance;

25、         }

26、  

27、     }

28、     /// <summary>

29、     /// 客户端调用

30、     /// </summary>

31、     public class Client

32、     {

33、         static void Main(string[] args)

34、         {

35、             

36、             Singleton s1 = Singleton.Instance();

37、             Singleton s2 = Singleton.Instance();

38、  

39、             Console.ReadKey();

40、                 //输出 对象为相同实例

41、            

42、  

43、         }

44、     }

 

单例模式应用分析

注意:

²  不要使用单例模式存取全局变量。这违背了单例模式的用意,最好放到对应类的静态成员中。

²  不要将数据库连接做成单例模式,因为一个系统可能会与多个数据库有连接,并且在有连接池的情况下,应该尽可能释放连接。Singleton模式由于使用静态成员存储类实例,所以可能会造成资源无法及时释放。

单例模式适用情形:

当类只能有一个实例而且客户可以从一个重所周知的访问点访问时;

当这个唯一实例应该时通过子类化可扩展,并且客户应该无需更改代码就能适用一个扩展的实例时。

 

特点:

²  实例控制:Single会阻止其他对象实例化其自己的Singleton对象的副本,从而确保所有对象都方位唯一实例;

²  额外开销:虽然很小,单如果每次对象请求引用时都要检查是否存在类的实例,将仍然需要一些开销;

²  可能的开发混淆:适用Singleton对象时,开发人员必须记住自己不能使用new关键字实例化对象。因为可能无法访问库源代码,因此应用程序开发人员可能会意外发现自己无法直接实例化此类;

²  对象的生产期问题:singleton不能解决删除单个对象的问题。


C#设计模式(1)——单例模式(讲解非常清楚)

一、引言 最近在学设计模式的一些内容,主要的参考书籍是《Head First 设计模式》,同时在学习过程中也查看了很多博客园中关于设计模式的一些文章的,在这里记录下我的一些学习笔记,一是为了...
  • u013472838
  • u013472838
  • 2015年04月02日 15:01
  • 705

大话设计模式——单例模式

宏观导图 细节展示  单例模式的结构图: 关键代码:  在GetInstance方法中,要加入判断。 if (instance==null) { instance=new Single...
  • u011500356
  • u011500356
  • 2015年01月05日 21:44
  • 1459

java 单例设计模式使用场景

单例设计模式的使用场景说明,优缺点,在线程中该使用那种方式的单例,其中涉及到类在JVM中的分配......
  • bob_Xing_Yang
  • bob_Xing_Yang
  • 2017年05月23日 10:53
  • 381

Java学习笔记---设计模式之单例模式

一、引言         单例模式是设计模式中最常用的一种,也是工作面试中会被经常问到的一种,因此,这篇文章将主要讲述如何实现单例模式,以及单例模式的一些优缺点。 二、单例模式的定义      ...
  • wenwen091100304
  • wenwen091100304
  • 2015年11月07日 13:51
  • 640

Java中的设计模式学习总结(二)---单例模式

java的二十三种设计模式之单例模式。
  • wu631464569
  • wu631464569
  • 2016年09月25日 18:39
  • 214

Android面试设计模式之单例模式

在面试的时候面试官会问我们常用的一些设计模式,这里先介绍一下单例模式。 为什么要使用单例模式 1.控制资源的使用,通过线程同步来控制资源的并发访问; 2.控制实例产生的数量,达到节约系统资源; 3...
  • qq_435559203
  • qq_435559203
  • 2016年09月12日 18:25
  • 577

设计模式之——单例模式(Singleton)的实现、优缺点和常见应用场景

一.单例模式的三种实现 以及各自的优缺点 转载自http://my.oschina.net/suyewanwan/blog/102525 单例模式:单例模式的意思就是只有一个实例。单例模式确保某...
  • qq_30465427
  • qq_30465427
  • 2015年08月09日 15:36
  • 1198

C#设计模式(一)单例模式

一、引言 最近在设计模式的一些内容,主要的参考书籍是《Head First 设计模式》,同时在学习过程中也查看了很多博客园中关于设计模式的一些文章的,在这里记录下我的一些学习笔记,一是为了帮助我...
  • kone0611
  • kone0611
  • 2017年07月20日 11:49
  • 165

设计模式系列(一)单例模式

一、简单介绍 单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。 《设计模式》书中对单例模式动机的介绍 对于系统中的某些类...
  • robertcpp
  • robertcpp
  • 2016年06月05日 11:00
  • 2225

C#设计模式——单例模式(Singleton)

一、引言 最近在设计模式的一些内容,主要的参考书籍是《Head First 设计模式》,同时在学习过程中也查看了很多博客园中关于设计模式的一些文章的,在这里记录下我的一些学习笔记,一是为了帮助我更深...
  • ycl295644
  • ycl295644
  • 2015年07月06日 08:53
  • 2112
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#设计模式学习之【单例模式】
举报原因:
原因补充:

(最多只允许输入30个字)