小华的故事--单例模式

昨日,重新温习了一下工厂模式和单例模式。

并且重新认识了设计模式,在学校期间接触过设计模式。

但是,在那个时期,学设计模式只是单纯的学习理论知识而已。

ps:顺便吐槽一下,上学期间学习的东西,大多数的情况会在未来的某个时间点完全遗忘掉。

最根本的原因在于,那个时期说学习的东西更偏重与理论,理论这种东西,只是潜移默化的告诉你“我知道这个”。

但是,当你真正开始用这个东西的时候发现无从下手。这也就造成了大学生找工作眼高手低的现象。

(以上纯属个人观点)

-------------------------------------------------回到正题-------------------------------------------------------------

先讲一下单例模式的个人理解:

单例模式,顾名思义,就是在一个运行机制(应用程序)中,一个class类只有一个实例的存在。

下面以小华的故事作为主线,讲一下单利模式的三种实现,如果理解有误,欢迎指出。

在小华初中的时候电脑还没有那么普及,小华非常想玩电脑(去QQ农场偷个菜什么的(●‘?‘●)),

恰好,邻居大土豪给儿子买了一台,于是乎小华就去了~~~但是,小华发现有好多人都和小华一样在等着玩电脑。

小土豪说:你们先等我玩完了!在去决定谁来玩。

基于这种思考,就开始实现讲关于小华的故事--单例模式:

小华的故事1、

开始时,小华的邻居大土豪买了一台电脑:

private static Singleton instance = new Singleton(); 

小土豪说这是我的电脑:

private Singleton(){   

  }  

小土豪玩累了,让给下一个人来玩:

private static Singleton getInstance(){
        return instance;
    }  

那个时候电脑就是精神的粮食,而大家非常需要这种粮食,可以说是非常饿。

所以,上面说实现的这种单例模式成为“饿汉模式”。

小华的故事2、

后来,小华认识了一个豪友,豪友也有电脑:

private Singleton(){   

}  

豪友早就玩腻了电脑,电脑就放在那里也不开机,

private static Singleton instance;     

但是,对于小华来说怎么能让电脑就这么放着浪费呢?!

豪~电脑可玩乎~~~,豪友很大方---随便玩!

public static Singleton getInstance(){
        if(instance == null){
            return instance = new Singleton();
        }else{
            return instance;
        }
    }    

有个豪友是多么重要啊!

不用像饿汉一样,天天等着小土豪玩完再玩。可以很慵懒的想玩就玩。所以,这种慵懒的生活就叫做“懒汉模式”。

小华的故事3、

好景不长,豪友的表弟暑假要在豪友家住,摆明了就是为了玩电脑去的。

电脑还是豪友的电脑:

private Singleton(){   

 }  

豪友一般还是不怎么玩,电脑一如既往的闲着:

private static Singleton instance;     

但是,小华却有了顾及。先要看电脑有没有人再用。

不免会发生这样一种情况,小华打开电脑的同时,豪友的表弟也进来要玩电脑。

豪友也是够仗义,告诉表弟电脑锁上了密码忘了,你先出去玩去吧!等电脑好了再叫你。

 public static Singleton getSingle(){    //外部通过此方法可以获取对象
    if(single == null){
        synchronized (Singleton.class) {   //保证了同一时间只能只能有一个对象访问此同步块
            if(single == null){
                single = new Singleton();
        }
      }
    }
    return single;   //返回创建好的对象
  }   

这样,豪友骗表弟电脑锁住了,就是所谓的“双重锁模式”。

这就是小华的故事--单例模式。

时间: 2024-10-06 09:51:21

小华的故事--单例模式的相关文章

用两个小例子来解释单例模式中的“双重锁定”

学习单例模式时,好多人都不太理解双重锁定.学完后突然想到一个很有趣的例子. 单例模式结构图: 代码: Singleton类 class Singleton { private static Singleton instance; private static readonly object syncRoot = new object(); //程序运行时创建一个静态只读的进程辅助对象 private Singleton() { } //用private修饰构造方法,防止外界利用new创建此类实例

HDU 小明系列故事——师兄帮帮忙 快速幂

小明系列故事--师兄帮帮忙 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 4850    Accepted Submission(s): 1275 Problem Description 小明自从告别了ACM/ICPC之后,就开始潜心研究数学问题了,一则可以为接下来的考研做准备,再者可以借此机会帮助一些同学,尤其是漂亮的师妹.这不,班

hdu 4511 小明系列故事——女友的考验

小明系列故事——女友的考验 Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 822    Accepted Submission(s): 176 Problem Description 终于放寒假了,小明要和女朋友一起去看电影.这天,女朋友想给小明一个考验,在小明正准备出发的时候,女朋友告诉他,她在电影院等他,小明过来的路线必须满足给定的规则

hdu4505小Q系列故事——电梯里的爱情

小Q系列故事——电梯里的爱情 Time Limit: 300/100 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 3626    Accepted Submission(s): 2284 Problem Description 细心的同事发现,小Q最近喜欢乘电梯上上下下,究其原因,也许只有小Q自己知道:在电梯里经常可以遇到他心中的女神HR. 电梯其实是个很暧昧的地方,只有在电梯

hdu---(4515)小Q系列故事——世界上最遥远的距离(模拟题)

小Q系列故事——世界上最遥远的距离 Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 1751    Accepted Submission(s): 628 Problem Description 世界上最遥远的距离 不是生与死 而是我就站在你面前 你却不知道我爱你 世界上最遥远的距离 不是我就站在你面前你却不知道我爱你 而是明明知道彼此相爱

小p的故事系列

http://acm.sdut.edu.cn/sdutoj/problem.php?action=seach 小P的故事——神奇的Dota #include <stdio.h> #include <stdlib.h> #include <string.h> int V; int f[100001]; int c[3] = {0,150,200,350}; int ans; int max(int a,int b) { return a>b?a:b; } int m

hdu4506小明系列故事——师兄帮帮忙 (用二进制,大数快速取余)

Problem Description 小明自从告别了ACM/ICPC之后,就开始潜心研究数学问题了,一则可以为接下来的考研做准备,再者可以借此机会帮助一些同学,尤其是漂亮的师妹.这不,班里唯一的女生又拿一道数学题来请教小明,小明当然很高兴的就接受了.不过等他仔细读题以后,发现自己也不会做,这下小明囧了:如果回复说自己不懂,岂不是很没面子? 所以,他现在私下求你帮忙解决这道题目,题目是这样的: 给你n个数字,分别是a1,a2,a3,a4,a5--an,这些数字每过一个单位时间就会改变,假设上一个

HDU 4520 小Q系列故事――最佳裁判(STL)

小Q系列故事——最佳裁判 Problem Description 过去的2012年对小Q来说是很悲催的一年,失恋了12次,每次都要郁闷1个来月. 好在小Q是个体育迷,在最痛苦的时候,他常常用观看各种体育节目来麻醉自己,比如伦敦奥运会期间,小Q就常常在周末邀上一群单身同事聚在自己的蜗居,一边畅饮啤酒,一边吹牛. 小Q最喜欢看的是跳水,主要原因也是因为这个项目有中国人参加,而且中国队员获胜的几率很大,一般不会再给自己添堵,不然何谈看体育疗情伤呢. 跳水项目的一个重要环节就是裁判打分,小Q他们有时候会

hduoj 4506 小明系列故事――师兄帮帮忙【分析题意】

小明系列故事――师兄帮帮忙 Description 小明自从告别了ACM/ICPC之后,就开始潜心研究数学问题了,一则可以为接下来的考研做准备,再者可以借此机会帮助一些同学,尤其是漂亮的师妹.这不,班里唯一的女生又拿一道数学题来请教小明,小明当然很高兴的就接受了.不过等他仔细读题以后,发现自己也不会做,这下小明?辶耍喝绻?回复说自己不懂,岂不是很没面子?  所以,他现在私下求你帮忙解决这道题目,题目是这样的:  给你n个数字,分别是a1,a2,a3,a4,a5--an,这些数字每过一个单位时间就