0x00 前言

朕虽花心,却深明事理。一山不容二虎,一国不容二母!因此不论朕有多少爱妃(我是逗逼啊,怎么可能还有爱妃,一个皇后就够了!),但是朕的皇后只有一个,这点毋庸置疑。

那么如何来体现朕的皇后的唯一性呢?就是单例模式了!

0x01 宫女请安

在朕的后宫中,皇后当之无愧的是天下第一(朕只能当第二),为了彰显皇后在后宫的地位,每日早晨,宫女必须向皇后娘娘请安。

一大群宫女每天都要来向皇后请安,皇后每天也要接见这群小妹妹们。由于皇后的唯一性,众妹妹在请安的时候都会大呼“皇后娘娘千岁!”,注意,大家称呼的是皇后娘娘,而不是张皇后、李皇后什么的。天天向一个皇后请安,也就不会把自己弄迷糊了。这点在设计领域中就要求,一个类只能生成一个对象。

那么怎么来实现呢?对象的产生是通过new关键字完成的(这是主要方式),这个怎么来控制呢?构造函数!在使用new关键字创建对象的时候,都会根据输入参数调用相应的构造函数,如果我们把皇后的构造函数设置成private私有访问权限是不是就可以禁止外部创建对象了?

下图就是宫女向唯一的皇后请安的过程。

只有两个类:Queen代表皇后,Maid代表宫女。

1.代码清单 皇后类

public class Queen {

private static final Queen queen = new Queen();

private Queen() {

}

public static Queen getInstance() {

return queen;

}

public static void say() {

System.out.println("本宫是yyj,尔等跪安吧~");

}

}

通过定义一个私有访问权限的构造函数,避免被其他类new出来一个对象,而Queen自己则可以new一个对象出来,其他类对该类的访问都可以通过getInstance获得同一个对象。

现在皇后有了,宫女要出场了。

2.代码清单 宫女类

public class Maid {

public static void main(String[] args) {

for(int i = 1 ; i < 4; i++) {

Queen queen = Queen.getInstance();

System.out.println("今天是第 " + i + " 天请安!");

queen.say();

}

}

}

宫女请安的运行结果如下所示。

今天是第 1 天请安!

本宫是yyj,尔等跪安吧~

今天是第 2 天请安!

本宫是yyj,尔等跪安吧~

今天是第 3 天请安!

本宫是yyj,尔等跪安吧~

宫女每天向皇后请安,每天抬头一看,呦,老熟人了,还是昨天那个皇后,这就是单例模式!

0x02 单例模式

1.概念

单例模式(Singleton Pattern)是一个比较简单的模式,其定义如下:

Ensure a class has only one instance, and provide a global point of access to it.(确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。)

2.构建方式

通常单例模式在Java语言中,有两种构建方式:

懒汉方式。指全局的单例实例在第一次被使用时构建。 饿汉方式。指全局的单例实例在类装载时构建。

3.代码清单 饿汉模式

public class Singleton {

private final static Singleton INSTANCE = new Singleton();

// Private constructor suppresses

private Singleton() {}

// default public constructor

public static Singleton getInstance() {

return INSTANCE;

}

}

4.代码清单 懒汉模式

public class Singleton {

private static volatile Singleton INSTANCE = null;

// Private constructor suppresses

// default public constructor

private Singleton() {}

//thread safe and performance  promote

public static  Singleton getInstance() {

if(INSTANCE == null){

synchronized(Singleton.class){

//when more than two threads run into the first null check same time, to avoid instanced more than one time, it needs to be checked again.

if(INSTANCE == null){

INSTANCE = new Singleton();

}

}

}

return INSTANCE;

}

}

0x03 扩展

单例模式的一个主要应用场景是保证系统中只有一个实例,但是我们也不必受单例中的“单”字的局限,在有些场景中可能需要的不仅仅是只有一个实例,而是要有有限个实例,这种情况实现的代码仍然是单例模式,只是把单个实例变成了有限个实例而已。

欢迎关注我的公众号:

java代码输出我喜欢你_程序员七夕如何表白:朕只爱一个皇后!(单例模式)...相关推荐

  1. 程序员七夕如何表白:朕只爱一个皇后!(单例模式)

    0x00 前言 朕虽花心,却深明事理.一山不容二虎,一国不容二母!因此不论朕有多少爱妃(我是逗逼啊,怎么可能还有爱妃,一个皇后就够了!),但是朕的皇后只有一个,这点毋庸置疑. 那么如何来体现朕的皇后的 ...

  2. 程序员该如何管理后宫:朕只爱一个皇后!(单例模式)

    0x00 前言 朕虽花心,却深明事理.一山不容二虎,一国不容二母!因此不论朕有多少爱妃(我是逗逼啊,怎么可能还有爱妃,一个皇后就够了!),但是朕的皇后只有一个,这点毋庸置疑. 那么如何来体现朕的皇后的 ...

  3. 程序员七夕情人节表白代码

    程序员七夕情人节表白代码 MainClass:com.wujinxi.ShowLove package com.wujinxi;import java.awt.*; import java.awt.d ...

  4. java斗图表情_程序员之间的斗图表情包, java真的输惨了!

    表情包成了人与人聊天中不可少的分量,陌生人聊天表情包丢出去妥妥的拉近关系变熟络啊(¬_¬) 而且可以用表情包化解尴尬.缓解气氛,可以没话找话.忙的时候也可以当做结束语,显得比较有礼貌! 对于沉默寡言. ...

  5. java excel 插件开发工具_程序员常用的15 种开发者工具推荐

    程序员常用的15 种开发者工具推荐:Java 线上诊断工具 Arthas.IDE 插件 Cloud Toolkit.混沌实验注入工具 ChaosBlade.Java 代码规约扫描插件.应用实时监控工具 ...

  6. java数据库的量级_程序员学Python还是Java?分析了8张图后得出这个结论

    Java和Python两门语言都是目前非常热门的语言,可谓北乔峰南慕容,二者不分上下,棋逢对手.但是对于初学者来说,非常困惑,因为时间和精力有限,上手必须要先学一门,到底选那个好呢,今天3分钟带你透彻 ...

  7. c语言代码表白_程序员教你表白:C/C++打造浪漫表白程序,找女朋友从现在开始...

    谁说C/C++程序员不浪漫???来来来一起打造一个浪漫的表白程序,配上好听的音乐,瞬间高大上的感觉. C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法 ...

  8. java装逼的话_程序员装逼指南(语言篇)

    原标题:程序员装逼指南(语言篇) 语言:千万不要说自己是做Java或者.Net的,一下子就屌丝了.PHP现在也不行,Python稍微有点烂大街,但还是明显要强过前几个.剩下的可以说自己是做Ruby的, ...

  9. java异步队对联_程序员的春节对联集锦

    上联:为系统而生,为框架而死,为debug奋斗一辈子! 下联:吃符号的亏,上大小写的当,最后死在需求上! 横批:杯具程序员. 上联:算法数据思路清晰 下联:编译链接一气呵成 横批:码到功成 上联:思前 ...

  10. 代码整理工具_程序员软件:程序员有哪些常用又好用的编码小工具?

    最近,有很多朋友让我帮忙整理一下程序员有哪些常用又好用的编码小工具.今天,小编就整理一下哦,希望大家一起学习,一起进步! 1. Notepad++ Notepad++中文版是一款非常有特色的编辑器,是 ...

最新文章

  1. Camera系列规格参数
  2. 代理上网后localhost使用不了,只能使用127.0.0.1解决
  3. source insight 里编辑的时候,每次粘贴后,光标停留在粘贴内容的左面
  4. 一文读懂Https的安全性原理、数字证书、单项认证、双项认证等
  5. 【SSH】——Hibernate三种状态之间的转化
  6. java闭锁_java8中CountDownLatch闭锁
  7. javafx 加载_JavaFX 2:如何加载图像
  8. 树莓派python gpio 模仿iic_Adafruit的树莓派教程:GPIO配置
  9. 四年级计算机课程,信息技术(四年级)全部课程PPT课件.ppt
  10. 机器学习十大经典算法之朴素贝叶斯分类
  11. mysql 协议的processInfo命令包及解析
  12. python dataframe中缺失值处理
  13. PHP-FPM,Nginx,FastCGI 之间的关系
  14. 助你成功打造一篇伪原创的三点技巧
  15. Spring Data Jpa 查询返回自定义对象
  16. 两种方式打开jar文件
  17. 腾讯良心软件,被秒了
  18. 设置在线html视频几倍数播放,HTML5倍数功能视频播放器(加速2倍,1.5倍播放)...
  19. esp8266 nvs应用
  20. Linux入门——与目录相关的一些命令(pwd、ls、cd)及tab和上下方向键的使用

热门文章

  1. php 回调cache 方案,基于PHP的一种Cache回调与自动触发技术
  2. Windows下 Nginx创建文件服务器
  3. windows10:检测windows defender是不是已经连接到了云安全中心
  4. Web API 文档生成工具 apidoc
  5. Android 修改字体,跳不过的 Typeface
  6. 乐在其中设计模式(C#) - 状态模式(State Pattern)
  7. Centos6 安装 Redis 和集群配置
  8. 历届奥斯卡获奖影片(1971-2014年)
  9. 在ASP.NET 2.0中实现URL重写
  10. 交换机的源地址学习机制和帧转发方式习题