[技术回顾系列]--单件模式

本文详细介绍了Singleton模式的概念及其在软件开发中的应用。通过一个简单的C#示例,展示了如何确保一个类仅有一个实例,并提供全局访问点。此外,还讨论了使用Singleton模式时需要注意的问题。

定义:
Singleton模式主要作用是保证在应用程序中,一个类只有一个实例存在。
在很多操作中比如建立目录,数据库连接都需要这样的单线程操作。还有 Singleton能够被状态化; 这样多个单件类在一起就可以象一个状态仓库一样向外提供服务,比如你要论坛中的帖子计数器,每次浏览一次需要计数,单件类能否保持住这个计数,如果你要把这个数字永久保存到数据库,你可以在不修改单件接口的情况下方便的做到。另外方面Singleton也能够被无状态化。提供工具性质的功能,Singleton模式就为我们提供了这样实现的可能。使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数,有利于垃圾回收,我们常常看到工厂模式中也会包含Singleton模式,因为被载入的类实际也属于资源。

如何使用?
一般Singleton模式有很多实现方式,下面仅仅说明一种通用的。

 1 None.gif using  System;
 2 None.gif
 3 None.gif namespace  ClassLibrary1
 4 ExpandedBlockStart.gifContractedBlock.gif dot.gif {
 5ExpandedSubBlockStart.gifContractedSubBlock.gif    /**//// <summary>
 6InBlock.gif    /// Summary description for Class1.
 7ExpandedSubBlockEnd.gif    /// </summary>

 8InBlock.gif    public class Singleton 
 9ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
10InBlock.gif
11InBlock.gif  private Singleton()
12ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{}
13InBlock.gif  //在自己内部定义自己一个实例,是不是很奇怪?
14InBlock.gif  //注意这是private 只供内部调用
15InBlock.gif  private static Singleton instance = new Singleton();
16InBlock.gif  //这里提供了一个供外部访问本class的静态方法,可以直接访问  
17InBlock.gif  public static Singleton getInstance() 
18ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
19InBlock.gif    return instance;   
20ExpandedSubBlockEnd.gif   }
 
21InBlock.gif
22ExpandedSubBlockEnd.gif    }

23ExpandedBlockEnd.gif}

24 None.gif

使用Singleton注意事项
有时在某些情况下,使用Singleton并不能达到Singleton的目的,如有多个Singleton对象同时被不同的类装载就会面临很多问题。所以
Singleton模式看起来简单,使用方法也很方便,但是真正用好,是非常不容易,需要对类、线程、内存等概念有相当的了解。
以前的一篇:设计模式[创建型]之单件模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值