C# 中的Singleton模式
一般写Singleton基本都是一下这个套路
class Singleton
{
public static Singleton instance; private Singleton()
{ } public static Singleton Getinstance()
{
if(instatnce == null)
{
instance = new Singleton();
} return instance;
}
}
但是今天学到一个C#独有的Singleton写法:
class sealed Singleton
{
public static readonly Singleton instance = new Singleton(); private Singleton()
{ }
}
这种写法简单实用,大大减少了代码量。
但是缺点就是无法被继承,并且启动时就被初始化,无法延迟初始化。
我以这种写法,写了一个简单的LoadBalance类。
public sealed class LoadBalancer
{
public static readonly LoadBalancer balancer = new LoadBalancer();
private ArrayList servers = new ArrayList();
private Random random = new Random(); protected LoadBalancer()
{
servers.Add("SERVER I");
servers.Add("SERVER II");
servers.Add("SERVER III");
servers.Add("SERVER IV");
servers.Add("SERVER V");
} public string Server
{
get
{
int i = random.Next(servers.Count);
return servers[i].ToString();
}
}
} class Program
{
static void Main(string[] args)
{
LoadBalancer b1 = LoadBalancer.balancer;
LoadBalancer b2 = LoadBalancer.balancer;
LoadBalancer b3 = LoadBalancer.balancer;
LoadBalancer b4 = LoadBalancer.balancer; if (b1 == b2 || b2 == b3 || b3 == b4)
Console.WriteLine("Same instance");
Console.WriteLine(b1.Server);
Console.WriteLine(b2.Server);
Console.WriteLine(b3.Server);
Console.WriteLine(b4.Server); Console.ReadLine();
}
}
调用的结果是:
Same instance
SERVER III
SERVER I
SERVER IV
SERVER IV
C# 中的Singleton模式的更多相关文章
- Qt 中使用Singleton模式需小心
在qt中,使用Singleton模式时一定要小心.因为Singleton模式中使用的是静态对象,静态对象是直到程序结束才被释放的,然而,一旦把该静态对象纳入了Qt的父子对象体系,就会导致不明确的行为. ...
- 面试:用 Java 实现一个 Singleton 模式
面试:用 Java 实现一个 Singleton 模式 面试系列更新后,终于迎来了我们的第一期,我们也将贴近<剑指 Offer>的题目给大家带来 Java 的讲解,个人还是非常推荐< ...
- Java设计模式(2)单态模式(Singleton模式)
定义:Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在. 在很多操作中,比如建立目录 数据库连接都需要这样的单线程操作. 还有,singleton能够被状态化 ...
- js中singleton模式解析及运用
singleton模式,又名单例模式.顾名思义,就是只能实例化一次的类(javascript中没有真正的类,我们通常用函数来模拟类,习惯称之为"伪类").具体地说,singleto ...
- AS3中的单件(Singleton)模式
单件(singleton)模式在c#中是最容易实现的模式,其主要用意就在于限制使用者用new来创建多个实例.但在as3中,构造函数必须是public的(语法本身要求的),而且也不能在构造函数中抛出异常 ...
- 剑指Offer面试题:1.实现Singleton模式
说来惭愧,自己在毕业之前就该好好看看<剑指Offer>这本书的,但是各种原因就是没看,也因此错过了很多机会,后悔莫及.但是后悔是没用的,现在趁还有余力,把这本书好好看一遍,并通过C#通通实 ...
- C++ Singleton模式
地址:http://www.cppblog.com/dyj057/archive/2005/09/20/346.html Singleton模式是常用的设计模式之一,但是要实现一个真正实用的设计模式却 ...
- Singleton模式和Mono-State模式
类和实例 对于大多数的类,都可以创建多个实例.在需要和不需要时,创建和删除这些实例.该过程会伴随着内存的分配和归还. 同时,有一些类,应该仅有一个实例.该实例在程序启动/结束时被创建和删除. root ...
- Singleton模式
Singleton模式的特点: 保证一个类仅有一个实例,并提供一个访问它的全局访问点. 定义一个Instance操作,允许客户访问它的唯一实例.Instance是一个类操作(C++中的一个静态成员函数 ...
随机推荐
- 一起入门python4之字典
今天我们来讲一下python的字典(dict).因为中午只有一个小时更新.所以更新内容不多,望多多指教,管他有没有人看,这都是对我的一种历练 .嘻嘻.其实我知道大多数论坛的牛牛都会.嘻嘻.I know ...
- python self introspection
http://www.ibm.com/developerworks/cn/linux/l-pyint/index1.html
- Postman
Postman功能(https://www.getpostman.com/features) 主要用于模拟网络请求包 快速创建请求 回放.管理请求 快速设置网络代理 安装 下载地址:https://w ...
- Oracle中创建MD5方法
create or replace function MD5(passwd in varchar2) return varchar2 is retval ); begin retval := utl_ ...
- Java Dao设计模式
一.信息系统的开发架构 客户层-------显示层-------业务层---------数据层---------数据库 1.客户层:客户层就是客户端,简单的来说就是浏览器. 2.显示层:JSP/S ...
- poj 2403
http://poj.org/problem?id=2403 题意:就是给你m个单词,以及n段对话.每一个单词都有所对应的价值.求对话中的价值总和 题解:很简单,就是用单词和价值对应起来,然后再寻找就 ...
- windows下打开VMware虚拟机时提示内存不足的处理方法
参考:http://thinkpig007.blog.51cto.com/971471/1589831 以管理员身份运行vmware.exe即可 错误的错误提示: Not enough physica ...
- unity3d 特殊文件夹和脚本编译顺序
unity3d 特殊文件夹和脚本编译顺序 转自http://blog.csdn.net/u010019717/article/details/40474631 大多数情况下,您可以选择任何你喜欢的文件 ...
- Application.AddMessageFilter(this);
开发环境:windows 8(x64), vs2013 只要“项目属性-调试”中选中“启用Visual Studio承载进程“,在VS2013中用F5调试,调用Application.AddMessa ...
- glib-2.49.4-msys-x86-staticLib.7z
glib-2.49.4 MSYS 静态库 编译 export LIBFFI_CFLAGS=" -I/usr/local/lib/libffi-3.2.1/include " \ e ...