1. 模式介绍

1.1 饱汉式单例实现

public class Singleton {//定义一个变量来存储创建好的类实例 private static Singleton uniqueInstance = null;private Singleton(){//}//定义一个方法来为客户端提供类实例 public static synchronized Singleton getInstance(){//判断存储实例的变量是否有值if(uniqueInstance == null){//如果没有,就创建一个类实例,并把值赋值给存储类实例的变量uniqueInstance = new Singleton();}//如果有值,那就直接使用return uniqueInstance;}
}

1.2 饿汉式单例实现

public class Singleton {//定义一个变量来存储创建好的类实例,直接在这里创建类实例,只会创建一次 private static Singleton uniqueInstance = new Singleton();
}

2. 线程安全?

3. 扩展单例

有多个单例。

public class OneExtend {//定义一个缺省的key值的前缀 private final static String DEFAULT_PREKEY = "Cache";//缓存实例的容器 private static Map<String,OneExtend> map = new HashMap<String,OneExtend>();//用来记录当前正在使用第几个实例,到了控制的最大数目,就返回从1开始 private static int num = 1;private final static int NUM_MAX = 3;  //定义控制实例的最大数目private OneExtend(){}public static OneExtend getInstance(){String key = DEFAULT_PREKEY+num;OneExtend oneExtend = map.get(key);if(oneExtend==null){oneExtend = new OneExtend();map.put(key, oneExtend);}//把当前实例的序号加1num++;if(num > NUM_MAX){//如果实例的序号已经达到最大数目了,那就重复从1开始获取num = 1;}return oneExtend;      }public static void main(String[] args) {OneExtend t1 = getInstance();OneExtend t2 = getInstance();OneExtend t3 = getInstance();OneExtend t4 = getInstance();OneExtend t5 = getInstance();OneExtend t6 = getInstance();System.out.println("t1=="+t1);System.out.println("t2=="+t2);System.out.println("t3=="+t3);System.out.println("t4=="+t4);System.out.println("t5=="+t5);System.out.println("t6=="+t6);}
}

《研磨设计模式》chap5 单例模式singleton相关推荐

  1. 设计模式之单例模式——Singleton

                        设计模式之单例模式--Singleton 设计意图: 保证类仅有一个实例,并且可以供应用程序全局使用.为了保证这一点,就需要这个类自己创建自己的对象,并且对外有 ...

  2. 设计模式之——单例模式(Singleton)的常见应用场景(转):

    单例模式(Singleton)也叫单态模式,是设计模式中最为简单的一种模式,甚至有些模式大师都不称其为模式,称其为一种实现技巧,因为设计模式讲究对象之间的关系的抽象,而单例模式只有自己一个对象,也因此 ...

  3. Java设计模式之单例模式(Singleton Pattern)

    **单例模式:用来创造独一无二的,只能有一个实例的对象设计模式.单例模式确保一个类只有一个实例,并提供一个全局访问点.**相比于全局变量(对对象的静态引用),单例模式可以延迟实例化,而且全局变量不能保 ...

  4. 【设计模式】单例模式 Singleton Pattern

    通常我们在写程序的时候会碰到一个类只允许在整个系统中只存在一个实例(Instance)  的情况, 比如说我们想做一计数器,统计某些接口调用的次数,通常我们的数据库连接也是只期望有一个实例.Windo ...

  5. 设计模式之单例模式(Singleton)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.FactoryMethod(工厂方法模式):2.Abstract Factory(抽象工厂模式):3.Sin ...

  6. 研磨设计模式之 单例模式-3

    3.3  延迟加载的思想 单例模式的懒汉式实现方式体现了延迟加载的思想,什么是延迟加载呢?         通俗点说,就是一开始不要加载资源或者数据,一直等,等到马上就要使用这个资源或者数据了,躲不过 ...

  7. 设计模式 -- 单例模式(Singleton)

    写在前面的话:读书破万卷,编码如有神 -------------------------------------------------------------------- 主要内容包括: 初始单例 ...

  8. Android设计模式——单例模式(Singleton)

    二十三种设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元 ...

  9. 设计模式(21):创建型-单例模式(Singleton)

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...

最新文章

  1. java 缓存分页_基于redis做缓存分页
  2. Python FastApi:post文件与数据/本地端测试
  3. mysql sp who_对ASE系统存储过程的剖析-sp_who
  4. Pytest脚本中运行用例方式
  5. c++ vscode 自动注释_VS2015自动添加注释
  6. Atitit.输入法配置说明v1 q229
  7. java jexl_利用Jexl实现数据库的计算公式在Java中执行
  8. VS Tips (new ones)
  9. uniapp编译成小程序代码过大的处理方法
  10. 大牛手把手教你用树莓派玩红警OPENRA
  11. (附源码)springboot垃圾自动分类管理系统 毕业设计 160846
  12. The nodejs-legacy package simply installs a symbolic link so that it can be executed using the node
  13. 第1060期AI100_机器学习日报(2017-08-13)
  14. sdut - 英文金曲大赛
  15. 北京大学 引进一位人工智能世界级专家!
  16. 计算机自动开机关机设置在哪里设置密码,怎样设置开关机密码
  17. peewee mysql_Peewee、MySQL和INSERT忽略
  18. python七段数码管创新_Python绘制七段数码管显示当前时间
  19. 谈谈自己关于阅读源码的一点鄙见
  20. 欧姆龙e5dc温控器_E5□C(E5AC/E5EC/E5CC/E5DC)温控器如何进行AT自整定?

热门文章

  1. table表格的两个实现方法(怎样消除内部边框的间距)
  2. linux离线安装rjava,无法在ubuntu系统上安装rJava
  3. access 战地1不加入ea_战地1正式加入origin access
  4. 【蓄电池维护】第二弹 看似普通的测试仪表笔暗藏了什么玄机?
  5. 如何识别数据中心的能源浪费?
  6. 用php写shell,php与shell实现多线程的简单例子
  7. ML之LiR2PolyR:使用线性回归LiR、二次多项式回归2PolyR模型在披萨数据集上拟合(train)、价格回归预测(test)
  8. ML之Medicine:利用机器学习研发药物—《Machine Learning for Pharmaceutical Discovery and Synthesis Consortium》
  9. OpenGL ES 如何能看到一个物体内部和象3dmax中能只显示网格线
  10. composer Failed to decode zlib stream