using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace Walter.K.Wang.Singleton
...{
/**//// <summary>
/// Singleton模式
/// </summary>
public class LoadBalancer
...{
private static LoadBalancer instance;
private ArrayList servers = new ArrayList();
private Random random = new Random();
private static object syncLock = new object();

/**//// <summary>
/// 構造函數
/// </summary>
protected LoadBalancer()
...{
servers.Add("服務一");
servers.Add("服務二");
servers.Add("服務三");
servers.Add("服務四");
servers.Add("服務五");
}

/**//// <summary>
/// 程序建立接口
/// </summary>
/// <returns></returns>
public static LoadBalancer GetLoadBalancer()
...{
if (instance == null)
...{
lock (syncLock)
...{
if (instance == null)
...{
instance = new LoadBalancer();
}
}
}
return instance;
}

/**//// <summary>
/// 返回創建的結果集
/// </summary>
public string Server
...{
get
...{
int r = random.Next(servers.Count);
return servers[r].ToString();
}
}
}
}
private void 單間模式ToolStripMenuItem_Click(object sender, EventArgs e)
...{
LoadBalancer b1 = LoadBalancer.GetLoadBalancer();
LoadBalancer b2 = LoadBalancer.GetLoadBalancer();
LoadBalancer b3 = LoadBalancer.GetLoadBalancer();
LoadBalancer b4 = LoadBalancer.GetLoadBalancer();
if (b1 == b2 && b2 == b3 && b3 == b4)
...{
MessageBox.Show("變量相同", "友情提醒", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
string sMsg = "";
for (int i = 0; i < 15; i++)
...{
sMsg += b1.Server+" ";
}
MessageBox.Show(sMsg, "友情提醒", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
本文通过一个负载均衡器的例子展示了Singleton模式的实现方式。该模式确保一个类只有一个实例,并提供全局访问点。实例创建过程采用双重检查锁定来提高效率。
350

被折叠的 条评论
为什么被折叠?



