您的位置:首页 > 其它

单件模式

2014-05-26 15:42 176 查看
有时候我们只需要某类一个对象,多个对象会产生不利的影响,如充当打印机:

public class OnlyModle
{
private static OnlyModle _only;
private OnlyModle() { }
public static OnlyModle GetInstance()
{
if (_only == null)
{
_only=new OnlyModle();
}
return _only;
//Console.WriteLine("display get");
//return new OnlyModle();
//return null;
}
}


这时候我们只需调用OnlyModle.GetInstance()就能得到唯一的对象

example:当我们需要牛奶时,最好需要一个没有水和奶的杯子,如果有就溢出了;且杯子有水和奶时我们才想喝,不能没水或者没奶时就不叫牛奶了。

[System.Runtime.Remoting.Contexts.Synchronization]
public class Cup : ContextBoundObject //这个是防止使用多线程时可能产生的错误
{
private bool _water;
private bool _milk;
private static Cup _cup;
private Cup()
{
_water = false;
_milk = false;
}

public static  Cup GetInstance()
{
if (_cup == null)
{
return new Cup();
}
return _cup;
}
public void Add()
{
if (!HasWater()||!HasMilk())
{
_water = true;
_milk = true;
//Console.WriteLine("1111");
}
}

public void Drink()
{
if (HasMilk() && HasWater())
{
_milk = false;
_water = false;
}
}

public bool HasWater()
{
return _water;
}

public bool HasMilk()
{
return _milk;
}
}


我们看看效果:

OnlyModle a=OnlyModle.GetInstance();
Cup aaa = Cup.GetInstance();
aaa.Add();
Console.WriteLine(aaa.HasWater());
Cup bbb=Cup.GetInstance();
//bbb.Add();
// bbb.Add();
Console.WriteLine(bbb.HasWater());
// Console.WriteLine("my test");
Console.ReadLine();


结果为Ture

False
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: