Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > .NET > VB.NET > 设计模式浅析之Singleton
【标  题】:设计模式浅析之Singleton
【关键字】:Singleton
【来  源】:http://aby.cnblogs.com/archive/2006/02/14/330147.html

设计模式浅析之Singleton

Your Ad Here

      在GoF的23种设计模式中,Singleton模式(中文称为单态或单件模式)是比较常用的模式之一.它的目的是保在调用期间, 一个类只有一个实例存在.最典型的例子为数据库连接, 数据库连接只需要一个, 所以可以使用单态模式.使用单态模式时, 创建数据库连接的方法, 只能为静态, 并且要保证方法的同步, 否则在多线程操作中, 有可能会创建多个实例.

      Singleton模式有两种写法,我们先用C#语言来写写第一种:
public sealed class Singleton
{
 private Singleton()
 {}

   public static readonly Singleton Instance = new Singleton();

 public void MethodA()
 {  ...  }
}
      己声明自己的实例,是不是有些奇怪?这里是单态模式写法的重点,调用这个类的方法MethodA的时候,应该使用Singleton.Instance.MethodA();注意这里的Instance还需要加上static和readonly修饰符.

      单态模式还需要注意的地方是:私有的构造函数,这是为了防止在类的外部被实例化,类的sealed修饰符,这是为了防止类被继承后变相产生多个实例.

      下面我们通过写一个数据库连接,来看一下Singleton模式的第二种写法(Lazy Initialization):
[Synchronization()]
public sealed class ConnectionClass
{
 private static OleDbConnection instance = null;
 private static string connectionString =
  @"Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=D:\My Documents\测试文件\book.mdb";

 public static OleDbConnection GetInstance()
 {
  if (instance == null)
  {
   Console.WriteLine("创建一个新的连接.");
   instance = new OleDbConnection(connectionString);
  }
  return instance;
 }
}

public class SingletonSample
{
 public static void Main()
 {
  OleDbConnection connection = ConnectionClass.GetInstance();
  connection.Open();
  // 进行一些操作
  ......
  connection = ConnectionClass.GetInstance();
  connection.Close();
 }
}
      注意到Lazy Initialization形式中的Synchronization,这个Synchronization很重要,如果没有Synchronization,那么使用getInstance()是有可能得到多个Singleton实例。

      我们还可以根据上面的代码对Singleton模式进行扩展,使它不仅适用于限定一个实例,也能支持两个实例,乃至指定数目的多个实例.限于篇幅,我就不多做介绍了.

      从这里可以看出,设计模式是程序员真正掌握面向对象核心思想的必修课,它并不是一种具体"技术",它讲述的是思想,它展示了接口或抽象类在实际案例中的灵活应用和智慧.

软件开发项目代码拾遗(基于.Net 1.1)-首页:【上一篇】
中文分词的应用——网站热点分析:【下一篇】
【相关文章】
  • C++/CLI singleton模式 (双重检测锁实现)
  • C#2.0 Singleton 的实现
  • Singleton 单例设计模式的Java实现
  • Singleton在Java中的应用
  • “软件设计模式”之单件(Singleton)
  • “设计模式初体验”之单件(Singleton)
  • Ogre的Singleton实现以及改进
  • VB.NET实现Singleton模式
  • [bingo]模式学习笔记四 Prototype & Singleton
  • constructor in singleton pattern
  • 【随机文章】
  • 浅析PCMCIA卡常识的方方面面
  • [转载]linux -c程序设计〔三〕
  • shell: awk最新教程
  • 细说Java之util类
  • 平滑过度到LINUX应用
  • 项目经理在电子政务建设中的困境
  • 李连杰北大演讲全文
  • 在PB中实现数字的英文大写和中文大写
  • 小试ASP.NET 2.0的兼容性
  • 摩托罗拉超宽带芯片计划 将数据输率提高至1gbps
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.