博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第 3 章 单例模式【Singleton Pattern】
阅读量:7120 次
发布时间:2019-06-28

本文共 2364 字,大约阅读时间需要 7 分钟。

以下内容出自:24种设计模式介绍与6大设计原则 

 

  这个模式是很有意思,而且比较简单,但是我还是要说因为它使用的是如此的广泛,如此的有人缘,

单例就是单一、独苗的意思,那什么是独一份呢?你的思维是独一份,除此之外还有什么不能山寨的呢?
我们举个比较难复制的对象:皇帝
  中国的历史上很少出现两个皇帝并存的时期,是有,但不多,那我们就认为皇帝是个单例模式,在这
个场景中,有皇帝,有大臣,大臣是天天要上朝参见皇帝的,今天参拜的皇帝应该和昨天、前天的一样(过
渡期的不考虑,别找茬哦),大臣磕完头,抬头一看,嗨,还是昨天那个皇帝,单例模式,绝对的单例模式,
先看类图:

然后我们看程序实现,先定一个皇帝 (饿饥汉模式):

package cn.mjorcen.singleton_pattern;/** * @author cbf4Life cbf4life@126.com I'm glad to share my knowledge with you *         all. 中国的历史上一般都是一个朝代一个皇帝,有两个皇帝的话,必然要PK出一个皇帝出来 */public class Emperor {    private static Emperor emperor = null; // 定义一个皇帝放在那里,然后给这个皇帝名字        private Emperor() {        // 世俗和道德约束你,目的就是不让你产生第二个皇帝    }    public static Emperor getInstance() {        if (emperor == null) { // 如果皇帝还没有定义,那就定一个            synchronized (Emperor.class) {                if (emperor == null) { // 如果皇帝还没有定义,那就定一个                    emperor = new Emperor();                }            }        }        return emperor;    }    // 皇帝叫什么名字呀    public static void emperorInfo() {        System.out.println("我就是皇帝某某某....");    }}

 或者定一个皇帝 (饱汉模式):

package cn.mjorcen.singleton_pattern;/** * @author cbf4Life cbf4life@126.com I'm glad to share my knowledge with you *         all. 中国的历史上一般都是一个朝代一个皇帝,有两个皇帝的话,必然要PK出一个皇帝出来 */public class Emperor {    private static Emperor emperor = new Emperor(); // 定义一个皇帝放在那里,然后给这个皇帝名字    private Emperor() {        // 世俗和道德约束你,目的就是不让你产生第二个皇帝    }    public static Emperor getInstance() {        return emperor;    }    // 皇帝叫什么名字呀    public static void emperorInfo() {        System.out.println("我就是皇帝某某某....");    }}

 

 

 

 

然后定义大臣:

package cn.mjorcen.singleton_pattern;/** * @author cbf4Life cbf4life@126.com I'm glad to share my knowledge with you *         all. 大臣是天天要面见皇帝,今天见的皇帝和昨天的,前天不一样那就出问题了! */@SuppressWarnings("all")public class Minister {    /**     * @param args     */    public static void main(String[] args) {        // 第一天        Emperor emperor1 = Emperor.getInstance();        emperor1.emperorInfo(); // 第一天见的皇帝叫什么名字呢?        // 第二天        Emperor emperor2 = Emperor.getInstance();        Emperor.emperorInfo();        // 第三天        Emperor emperor3 = Emperor.getInstance();        emperor2.emperorInfo();        // 三天见的皇帝都是同一个人,荣幸吧!    }}

 

  看到没,大臣天天见到的都是同一个皇帝,不会产生错乱情况,反正都是一个皇帝,是好是坏就这一

个,只要提到皇帝,大家都知道指的是谁,清晰,而又明确。问题是这是通常情况,还有个例的,如同一
个时期同一个朝代有两个皇帝,怎么办?
  单例模式很简单,就是在构造函数中多了加一个构造函数,访问权限是private 的就可以了,这个模
式是简单 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载地址:http://shnel.baihongyu.com/

你可能感兴趣的文章
openstack之镜像管理
查看>>
Gartner 2018 年WAF魔力象限报告:云WAF持续增长,Bot管理与API安全拥有未来
查看>>
如何在Java客户端调用RESTful服务
查看>>
一个月薪两万的Web安全工程师要掌握哪些技能?
查看>>
同事写得Python对页面压测脚本
查看>>
H2:开源内存数据库引擎
查看>>
(原創) 何谓可读性高的程序? (C/C++)
查看>>
JAVA的类名.this
查看>>
TP复习8
查看>>
最近要用C#实现用免费smtp服务器(GMail)发邮件,贴段整理好的代码
查看>>
通信原理实践(一)——音频信号处理
查看>>
如何实现网页上的气球提示
查看>>
js获取地址栏url以及获取url参数
查看>>
Oracle之自动收集统计信息
查看>>
[LintCode] Subarray Sum Closest
查看>>
发展需要大师,繁荣更需批评——GIS现状堪忧
查看>>
MapXtreme2004 连接oracle spatial的问题
查看>>
resources about DOM-Drag
查看>>
Bootstrap 3之美03-独立行,文字环绕,图片自适应,隐藏元素
查看>>
K星异客
查看>>