【发布时间】:2010-10-03 17:07:17
【问题描述】:
我尝试学习设计模式,但真的很难理解 OOD 的主要思想。我用经典方法创建了我的软件。另一方面,我想学习OOD。为什么我需要单身人士和其他人?我编写了一些简单的程序:其中一个是古典的(我的风格),另一个是单例模式。请教我为什么需要单例。我的方法比它更好更清晰:)
我的风格:(C#)
public partial class Singletonsuz : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Loadbalancer balancer = new Loadbalancer();
for (int i = 0 ; i < 15 ; i++)
{
string server = balancer.Server;
Response.Write("Dispatch Request to: " + server);
}
}
}
class Loadbalancer
{
private List<string> _servers = new List<string>();
private Random _random = new Random();
public Loadbalancer()
{
_servers.Add("ServerI");
_servers.Add("ServerII");
_servers.Add("ServerIII");
_servers.Add("ServerIV");
_servers.Add("ServerV");
}
public string Server
{
get
{
int r = _random.Next(_servers.Count);
return _servers[r].ToString();
}
}
}
单身:
public partial class SingletonDP2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
LoadBalancer balancer = LoadBalancer.GetLoadBalancer();
for (int i = 0; i < 15; i++)
{
string server = balancer.Server;
Response.Write("Dispatch Request to: " + server );
}
}
class LoadBalancer
{
private static LoadBalancer _instance;
private List<string> _servers = new List<string>();
private Random _random = new Random();
private static object syncLock = new object();
protected LoadBalancer()
{
_servers.Add("ServerI");
_servers.Add("ServerII");
_servers.Add("ServerIII");
_servers.Add("ServerIV");
_servers.Add("ServerV");
}
public static LoadBalancer GetLoadBalancer()
{
if (_instance == null)
{
lock (syncLock)
{
if (_instance == null)
{
_instance = new LoadBalancer();
}
}
}
return _instance;
}
public string Server
{
get
{
int r = _random.Next(_servers.Count);
return _servers[r].ToString();
}
}
}
}
【问题讨论】:
-
当然,单例的优缺点已经讨论得够多了……*.com/questions/137975/…*.com/questions/449885/…
标签: c# .net design-patterns oop