[Head First设计模式]一个人的平安夜——单例模式

[Head First设计模式]山西面馆中的设计模式——装饰者模式

[Head First设计模式]山西面馆中的设计模式——观察者模式

[Head First设计模式]山西面馆中的设计模式——建造者模式

[Head First设计模式]饺子馆(冬至)中的设计模式——工厂模式

引言

已经不想再数这是第多少个一个人的平安夜了,一个人走在路上,发现满脑子的技术问题,也许,在技术中才能找到一点安慰吧。很多朋友一直问我,为什么那么拼,lz只是觉得“如果连自己喜欢的工作,都做不好,那么活着就太空虚了,男人么就应该对自己恨一点。如果你现在没有得到你想要的生活,只能说明你对自己还不够狠”。言归正传,说说今天的单例模式。

单例模式定义

单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。

大家都知道“一夫一妻制”,在中国,一个男人,有且只能有一个媳妇,如果你非要找个小三,势必会增加开销,占用更多资源。所以没资本的屌丝们,劝你们,媳妇这个对象有且只能创建一个,如果你不自量力,非要整个小三出来,像某某官员,一般不会出问题,但当小三和你媳妇争夺资源的时,势必会出现致命性的bug,信不信由你?

 单例模式类图

 (类图来自:http://www.cnblogs.com/zhili/p/SingletonPatterm.html,这里借用一下)

实现单例模式条件

通过观察上面类图可知:

1.静态的私有化字段;

private static readonly Singleton uniqueInstance = new Singleton();

2.私有构造器

  private Singleton(){ }

3.提供公共的访问该类实例的方法.

1  public static Singleton GetInstance()
2         {
3             return uniqueInstance;
4         }

常见的单例模式

一,饿汉式

 1   public sealed class Singleton
 2     {
 3         #region 饿汉式
 4         private static readonly Singleton uniqueInstance = new Singleton();
 5         private Singleton() { }
 6         public static Singleton GetInstance()
 7         {
 8             return uniqueInstance;
 9         }
10         #endregion
11     }

优点:

  1.线程安全 
  2.在类加载的同时已经创建好一个静态对象,调用时反应速度快。

3.通过sealed修饰类,阻止派生类的出现,因为派生可能会增加实例。

缺点:

  资源效率不高,可能GetInstance()永远不会执行到,但执行该类的其他静态方法或者加载了该类(class.forName),那么这个实例仍然初始化。

 二,懒汉式

 1  public sealed class Singleton
 2     {
 3         private static Singleton instance;
 4         //程序运行时创建一个静态的只读对象
 5         private static readonly object o = new object();
 6         private Singleton() { }
 7         public static Singleton GetInstance()
 8         {
 9             //双重锁
10             //先判断实例是否存在,不存在再加锁处理
11             //这样不用让线程每次都加锁,保证了线程安全,也提高了性能
12             if (instance == null)
13             {
14                 //保证只有一个线程
15                 lock (o)
16                 {
17                     ///若实例不存在,则new一个新实例,否则返回已有的实例      
18                     if (instance == null)
19                     {
20                         instance = new Singleton();
21                     }
22                 }
23             }
24             return instance;
25         }
26     }

懒汉式面临线程安全的问题,通过双重锁定这样的处理才可以保证安全。

测试

 1  class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             Singleton singleton1 = Singleton.GetInstance();
 6             Singleton singleton2 = Singleton.GetInstance();
 7             if (singleton1==singleton2)
 8             {
 9                 Console.WriteLine("两个对象一样");
10             }
11             Console.Read();
12         }
13     }

结果

本打算创建个对象,给我买个苹果的,看来两个对象一样,也只能自己给自己买了。

总结

单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点。

博客地址: http://www.cnblogs.com/wolf-sun/
博客版权: 本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。
如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步!
再次感谢您耐心的读完本篇文章。

转载:http://www.cnblogs.com/wolf-sun/p/3489549.html

时间: 2016-05-24

[Head First设计模式]一个人的平安夜——单例模式的相关文章

平安夜送“苹果” 搜狗联盟开放注册再掀高潮   

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 随着搜狗联盟开放注册一期活动圆满结束,二期活动也已紧锣密鼓展开.目前登录搜狗联盟首页即可看到"平安夜送'苹果'"开放注册活动悄然上线. 据搜狗联盟相关618.html">负责人介绍,本次活动除了延续开放注册一期"感恩迎新"的主题外,对奖品以及服务的回馈更加大了力度.活动期间(12月3日至

滴滴打车发布平安夜国人出行数据报告,总计3000万人挤进出租车

DoNews 12月26日消息 滴滴打车今天发布了<2014年平安夜国人出行数据报告>,滴滴打车借助大数据团队的技术支撑,引导乘客.提示司机,提升了城市出租车调度效率. 据统计,2014年平安夜,使用滴滴打车召租车的乘客打车成功率达90%,全国共计有3000万人使用滴滴打车到达了目的地:当晚使用滴滴打车平台的出租车司机平均比以往多接2.6个订单. 平安夜作为当下中国广大中青年人最热衷追捧的"洋节",引发的"圣诞效应"在短时间内让各类社会消费行为达到顶峰.

郭富城平安夜演出献上20年最精彩表演(图)

郭富城将于 平安夜在广东道表演跟大家迎圣诞 新浪娱乐讯 北京时间12月9日,据香港媒体报道,郭富城将于平安夜演出海港城"广东道圣诞Super Street Party",与全港市民共迎圣诞.正在北京拍3D电影<大闹天宫>的郭富城,届时特别向剧组请假返港表演,反转广东道. 此次郭富城破天荒演出圣诞秀,他说:"一直都希望和fans在广东道迎圣诞,因为气氛真的好warm.好热闹,而且今年刚好是我入行20周年,希望可以藉着'Super Street Party',献上自己

“德克萨斯扑克”平安夜论坛游戏的圣宴

德州扑克全称为Texas Hold'em,是一种玩家对玩家的公共牌类游戏.一张台面上少则2人,多则可以容纳22人,而一般是由2到10人参加. 德州扑克一共有52张扑克牌,没有王牌.每个玩家分两张牌作为"底牌",五张由荷官陆续朝上发出的公共牌.在牌局开始的时候,每个玩家都会发得两张面朝下的底牌.在经过所有的押注圈以后,若仍不能分出胜负,游戏则会进入"摊牌"阶段,也就是让所剩的玩家亮出各自的底牌以较高下,持大牌者获胜. 德州扑克是一种知识性非常强的扑克游戏,有一定的运气

亚马逊云服务故障 Netflix流媒体服务平安夜中断

http://www.aliyun.com/zixun/aggregation/16449.html">CNET科技资讯网 12月115.html">26日 国际报道 Netflix表示,在圣诞平安夜里,其流媒体服务出现中断,影响到了许多用户"但不是全部用户". Netflix流媒体宕机事件出现在当地时间12月24日下午1点之前.约三小时后,Netflix在Twitter上道歉称: "很抱歉,我们在圣诞节前夕出现了宕机事件,这是一个可怕的时间!

平安夜Godaddy域名大放送.COM只需5.99美元

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 今天是圣诞节的前夜平安夜,Godaddy在平安夜为大家推出的了强有力的COM域名优惠,只需要5.99美元就可以注册COM域名了. 据悉,Godaddy这次推出的平安夜COM域名优惠,每个客户只限一个订单,而且每个订单最多5个域名,COM域名优惠适用于新域名第一年注册,而对于域名续费或转移则不适用于此优惠,直接通过Godaddy官方注册COM域

平安夜,大众点评交上了2014年的成绩单

摘要: 平安夜,大众点评交上了2014年的成绩单.年初,CEO张涛在内部年会上宣布开始二次创业,大众点评进入重启,全面进攻时代.年底,点评外部寻求开放战略,内部追求狼性执行力. 他 平安夜,大众点评交上了2014年的成绩单.年初,CEO张涛在内部年会上宣布开始"二次创业",大众点评进入"重启,全面进攻"时代.年底,点评外部寻求"开放战略",内部追求"狼性执行力". 他们归纳自己的2014为:在团购.推广以及新开拓的多项新业务上

还在为平安夜吃什么而纠结?

中新网西安12月24日电 (记者 张一辰)"平安夜还为吃什么纠结?还为去饭店等座位而发愁?不如今晚家庭聚餐走起,小店为您备足各系美味,送菜上门全城包邮喔."平安夜前夕,经营网络"私房菜"的西安80后周钢发微博推广他的圣诞大餐. 如今,"圣诞节"已走进内地民众生活,尤为年轻人所热衷,"中国式"平安夜的关键词"热闹"."狂欢"与西方国家的"温馨"."团聚&quo

平安夜数据,我买网网站整体销售额同比增长325%

[摘要]       据统计,自12月13日启动生鲜季以来,截止到12月24日24:00,我买网网站整体销售额同比增长325%.     [正文]         伴随着新年脚步声的日益临近,我买网吹响了岁末"进攻"的号角,通过自身品类优势结合市场趋势进行的冬季生鲜品类营销,获得了大量消费者的强烈关注."玩转圣诞,礼物藏在圣诞袜"."进口美食1元秒"."跨年狂犇"等一系列圣诞亮点活动,打响了跨年大促的第一炮.据统计,自12月1