码迷,mamicode.com
首页 > 其他好文 > 详细

单件模式

时间:2014-05-28 04:41:53      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:style   c   class   blog   code   java   

有时候我们只需要某类一个对象,多个对象会产生不利的影响,如充当打印机:

bubuko.com,布布扣
    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;
        }
    }
bubuko.com,布布扣

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

 

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

bubuko.com,布布扣
    [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;
        }
    }
bubuko.com,布布扣

我们看看效果:

bubuko.com,布布扣
            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();
bubuko.com,布布扣

结果为Ture

         False

单件模式,布布扣,bubuko.com

单件模式

标签:style   c   class   blog   code   java   

原文地址:http://www.cnblogs.com/junyong/p/3753218.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!