首页 > 代码库 > 单件模式
单件模式
有时候我们只需要某类一个对象,多个对象会产生不利的影响,如充当打印机:
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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。