一般写Singleton基本都是一下这个套路

  1. class Singleton
  2. {
  3. public static Singleton instance;
  4.  
  5. private Singleton()
  6. {
  7.  
  8. }
  9.  
  10. public static Singleton Getinstance()
  11. {
  12. if(instatnce == null)
  13. {
  14. instance = new Singleton();
  15. }
  16.  
  17. return instance;
  18. }
  19. }

但是今天学到一个C#独有的Singleton写法:

  1. class sealed Singleton
  2. {
  3. public static readonly Singleton instance = new Singleton();
  4.  
  5. private Singleton()
  6. {
  7.  
  8. }
  9. }

这种写法简单实用,大大减少了代码量。

但是缺点就是无法被继承,并且启动时就被初始化,无法延迟初始化。

我以这种写法,写了一个简单的LoadBalance类。

  1. public sealed class LoadBalancer
  2. {
  3. public static readonly LoadBalancer balancer = new LoadBalancer();
  4. private ArrayList servers = new ArrayList();
  5. private Random random = new Random();
  6.  
  7. protected LoadBalancer()
  8. {
  9. servers.Add("SERVER I");
  10. servers.Add("SERVER II");
  11. servers.Add("SERVER III");
  12. servers.Add("SERVER IV");
  13. servers.Add("SERVER V");
  14. }
  15.  
  16. public string Server
  17. {
  18. get
  19. {
  20. int i = random.Next(servers.Count);
  21. return servers[i].ToString();
  22. }
  23. }
  24. }
  25.  
  26. class Program
  27. {
  28. static void Main(string[] args)
  29. {
  30. LoadBalancer b1 = LoadBalancer.balancer;
  31. LoadBalancer b2 = LoadBalancer.balancer;
  32. LoadBalancer b3 = LoadBalancer.balancer;
  33. LoadBalancer b4 = LoadBalancer.balancer;
  34.  
  35. if (b1 == b2 || b2 == b3 || b3 == b4)
  36. Console.WriteLine("Same instance");
  37. Console.WriteLine(b1.Server);
  38. Console.WriteLine(b2.Server);
  39. Console.WriteLine(b3.Server);
  40. Console.WriteLine(b4.Server);
  41.  
  42. Console.ReadLine();
  43. }
  44. }

调用的结果是:

Same instance

SERVER III

SERVER I

SERVER IV

SERVER IV

C# 中的Singleton模式的更多相关文章

  1. Qt 中使用Singleton模式需小心

    在qt中,使用Singleton模式时一定要小心.因为Singleton模式中使用的是静态对象,静态对象是直到程序结束才被释放的,然而,一旦把该静态对象纳入了Qt的父子对象体系,就会导致不明确的行为. ...

  2. 面试:用 Java 实现一个 Singleton 模式

    面试:用 Java 实现一个 Singleton 模式 面试系列更新后,终于迎来了我们的第一期,我们也将贴近<剑指 Offer>的题目给大家带来 Java 的讲解,个人还是非常推荐< ...

  3. Java设计模式(2)单态模式(Singleton模式)

    定义:Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在. 在很多操作中,比如建立目录 数据库连接都需要这样的单线程操作. 还有,singleton能够被状态化 ...

  4. js中singleton模式解析及运用

    singleton模式,又名单例模式.顾名思义,就是只能实例化一次的类(javascript中没有真正的类,我们通常用函数来模拟类,习惯称之为"伪类").具体地说,singleto ...

  5. AS3中的单件(Singleton)模式

    单件(singleton)模式在c#中是最容易实现的模式,其主要用意就在于限制使用者用new来创建多个实例.但在as3中,构造函数必须是public的(语法本身要求的),而且也不能在构造函数中抛出异常 ...

  6. 剑指Offer面试题:1.实现Singleton模式

    说来惭愧,自己在毕业之前就该好好看看<剑指Offer>这本书的,但是各种原因就是没看,也因此错过了很多机会,后悔莫及.但是后悔是没用的,现在趁还有余力,把这本书好好看一遍,并通过C#通通实 ...

  7. C++ Singleton模式

    地址:http://www.cppblog.com/dyj057/archive/2005/09/20/346.html Singleton模式是常用的设计模式之一,但是要实现一个真正实用的设计模式却 ...

  8. Singleton模式和Mono-State模式

    类和实例 对于大多数的类,都可以创建多个实例.在需要和不需要时,创建和删除这些实例.该过程会伴随着内存的分配和归还. 同时,有一些类,应该仅有一个实例.该实例在程序启动/结束时被创建和删除. root ...

  9. Singleton模式

    Singleton模式的特点: 保证一个类仅有一个实例,并提供一个访问它的全局访问点. 定义一个Instance操作,允许客户访问它的唯一实例.Instance是一个类操作(C++中的一个静态成员函数 ...

随机推荐

  1. Android隐藏标题栏和状态栏

    一.隐藏标题栏 //隐藏标题栏 this.requestWindowFeature(Window.FEATURE_NO_TITLE); 二.隐藏状态栏 //隐藏状态栏 this.getWindow() ...

  2. 2016年10月27日--css样式表

    CSS样式表 样式表分类 1.内联样式表 和html联合显示,控制精确,但是可重用性差,冗余多. !doctype html> <html> <head> <met ...

  3. Codeforces Gym 100114 D. Selection

    Description 问选择一个序列上的所有数的最少操作次数,跟电脑上选择文件一样,输出操作方案. Sol 贪心. 用Shift一段文件只能使用一次,之后必须一直按Ctrl了. 然后就是看用Shif ...

  4. 24 UsageEnvironment使用环境抽象基类——Live555源码阅读(三)UsageEnvironment

    24 UsageEnvironment使用环境抽象基类——Live555源码阅读(三)UsageEnvironment 24 UsageEnvironment使用环境抽象基类——Live555源码阅读 ...

  5. UICollectionView + AFNetWorking 异步加载,局部刷新.

    最近在做的项目需要cell里面的数据需要和后台实时交互.而collectionview reload会整体刷新. //m层 发送通知 [[NSNotificationCenter defaultCen ...

  6. UML统一建模编程

    PowerDesigner 可以通过类图直接可视化生成代码 UML模型元素: 表示模型中的某个概念(类.对象.用例.结点.组件.包.接口等等): 表示模型间相互连接的关系(关联.泛化.依赖.聚集).

  7. extjs动态改变样式

    { width:438, height:440, name:'loginDiv', ui:'123', x: '50%' , y: 200, border:true, bodyStyle:{ 'bor ...

  8. 【GoLang】golang 微服务框架 介绍

    原文如下: rpcx是一个类似阿里巴巴 Dubbo 和微博 Motan 的分布式的RPC服务框架,基于Golang net/rpc实现. 谈起分布式的RPC框架,比较出名的是阿里巴巴的dubbo,包括 ...

  9. C# 毕业证书打印《五》

    对鼠标操作Label的方法 #region //定义一个枚举类型,描述光标状态 private enum EnumMousePointPosition { #region MouseSizeNone ...

  10. SQL Server被锁的表以及解锁

    select   request_session_id   spid,OBJECT_NAME(resource_associated_entity_id) tableName   from   sys ...