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 constructorpublic static Singleton getInstance() {return INSTANCE;}}

4.代码清单 懒汉模式

public class Singleton {private static volatile Singleton INSTANCE = null;// Private constructor suppresses // default public constructorprivate 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 扩展

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

0xFF 参考

  • 《设计模式之禅 》
  • http://www.runoob.com/design-pattern/singleton-pattern.html
  • https://zh.wikipedia.org/zh-hans/%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F

2016-11-09 12:33:12 hzct


原创文章,转载请注明: 转载自赵德栋的 博客

个人主页 CSDN博客

作者:赵德栋,作者介绍

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

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

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

  2. 程序员该如何管理后宫:皇后造小人(工厂模式)

    0x00 前言 朕日常忙于公务,难免偶尔会冷落了皇后,为了不让皇后太无聊,朕决定来教皇后怎么造小人! 别误会,这个小人不是生出来的,是造出来的.朕将这种造小人的仙术教给了皇后,皇后就造了下面的一堆堆小 ...

  3. 程序员该如何管理后宫:怎样哄女孩儿(策略模式)

    0x00 前言 试问,哪个帝王不想开疆拓土,成就万世之霸业,流传千古?! 朕,虽坐享盛世,仍不忘对外扩张以彰显国威. 近日上朝,有大臣上奏,近邻女儿国因缺乏壮丁,国力衰弱,正是入侵的最好时机.朕当然批 ...

  4. 软妹音程序员鼓励师24小时在线,只需一个VSCode插件,还能帮忙吐槽产品经理...

    Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 鱼羊 郭一璞 发自 凹非寺 量子位 报道 | 公众号 ...

  5. 程序员生存定律--管理向左,技术向右

    点击打开链接 一个程序员在考虑增值时无法回避的一个根本问题是到底是做技术还是做管理.当然也有些职位会介于两者之间比如架构师,但我们暂时不去做细分,而是用简单的二分法. 这种基本方向上的选择对后续很多细 ...

  6. 我35岁,程序员,“中危”后帮别人规划人生

    35 岁,有妻有子,有房有车,但却没有上升空间了. 做程序员,35 岁是个"终极门槛",如果不能往上做管理,可能就要重新考虑是否需要转行--如果不主动考虑,也很可能被公司主动&qu ...

  7. 《告别失控:软件开发团队管理必读》一一第1章 程序员为何难以管理

    第1章 程序员为何难以管理 告别失控:软件开发团队管理必读 程序设计作为一种严肃的职业已经存在60多年了.在美国,从事程序设计工作的程序员数以百万计,而全球这个数字更大.这些数字还不包括人数众多的学生 ...

  8. 程序员的时间管理计划

    目录 01优秀程序员的时间概念 02优秀程序员的时间分类 03时间管理法则 最近大家都在忙着做什么呢?忙着找工作?忙着工作?抑或是忙着当一条咸鱼,但是每天都给自己贴上一条正在忙着思考人生的标签? 不管 ...

  9. 程序员如何在工作后找到女朋友?

    点击上方"程序IT圈",选择"置顶公众号" 关键时刻,第一时间送达! 本文来源于公众号:计算机与网络安全 https://mp.weixin.qq.com/s/ ...

最新文章

  1. oracle的for和i++
  2. oracle远程连接配置
  3. Android万能遥控菜单选择添加,Android万能遥控器小应用
  4. rocketmq存储结构_RocketMQ消息存储
  5. 最新dotCMS SQL注入漏洞 攻击者可获得敏感数据 绿盟科技发布安全威胁通告
  6. 图像椒盐噪声和高斯噪声
  7. visual studio 代码提示插件_程序员请收好:10个非常有用的Visual Studio Code插件
  8. power bi 雷达图_【自助式数据分析平台——WonderBI(豌豆BI)】免费在线试用_软件库...
  9. 热烈庆祝《大数据》成功入选中国科技核心期刊目录~
  10. mariadb中文手册_mariadb中文手册
  11. Origin简单绘图
  12. dell 恢复介质_戴尔官方WIN10恢复介质镜像下载与安装教程 | Dell 中国
  13. SSD硬盘的数据恢复
  14. 洛谷每日三题之第六天
  15. 有哪些技术可以自动拨打电话
  16. 葵花宝典之数据结构1800T--2
  17. 通过Excel VBA对序列实现自动分级
  18. LightCMS1.3.7-RCE漏洞
  19. 台式机网线连接笔记本通过wifi上网
  20. python tcl tk_如何解决Mac版关于python3.5.X的Tcl/Tk (8.5.9) 的警告?

热门文章

  1. linux办公文件格式,Linux终端文件类型与颜色
  2. 程序员的诗和唐寅的诗
  3. vue上传录音_通过使用vue如何才能实现添加mp3音频文件
  4. 市政下水道疏通机器人_市政下水道疏通机器人的制作方法
  5. 研发效能度量框架解读
  6. Unity3d 技巧(4)-如何配置JavaHome
  7. 2018东北四省赛 Store The Matrix (矩阵)
  8. 大疆笔试题目总结--参考历届试卷
  9. NOR FLASH (mx25u12835f) lock/unlock功能及linux对其支持
  10. 小说下载阅读器_初始简单版