Java设计模式(学习整理)---单例模式
1、概念:
java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。
单例模式有一下特点:
1、单例类只能有一个实例。
2、单例类必须自己自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。总之,选择单例模式就是为了避免不一致状态,避免政出多头。
2、举例说明:
2.1懒汉式单例
1 /** 2 * 单例模式测试: 3 * ---懒汉模式 4 * @author 小风微灵 5 * 6 */ 7 public class SingleMode { 8 9 /* 10 * 第一步:创建一个本身的私有对象:不初始化 11 */ 12 private static SingleMode single=null; 13 14 /** 15 * 第二步:私有化构造器:使得该类不能被new出对象 16 */ 17 private SingleMode(){} 18 19 /** 20 * 第三步:一个静态的获取私有对象方法 21 */ 22 public static SingleMode getInstance(){ 23 24 if(single==null){ 25 single=new SingleMode(); 26 } 27 return single; 28 } 29 }
2.2饿汉式单例
1 /** 2 * 单例模式测试: 3 * ---饿汉模式 4 * @author 小风微灵 5 * 6 */ 7 public class SingleMode_EH { 8 /* 9 * 第一步:创建一个本身的私有对象:初始化 10 */ 11 private static SingleMode_EH single_=new SingleMode_EH(); 12 13 /** 14 * 第二步:私有化构造器:使得该类不能被new出对象 15 */ 16 private SingleMode_EH(){} 17 18 /** 19 * 第三步:一个静态的获取私有对象方法 20 */ 21 public static SingleMode_EH getInstance(){ 22 23 return single_; 24 } 25 }
2.3登记式单例
1 package mode_single; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 6 /** 7 * 单例模式测试: 8 * ---登记式单例模式 9 * @author 小风微灵 10 * 11 */ 12 public class SingleMode_DJS { 13 private static Map<String,SingleMode_DJS> map = new HashMap<String,SingleMode_DJS>(); 14 /** 15 * 静态块:事先把实例存放在表Map中 16 */ 17 static{ 18 SingleMode_DJS single = new SingleMode_DJS(); 19 map.put(single.getClass().getName(), single); 20 } 21 /** 22 * 构造器:受保护 23 */ 24 protected SingleMode_DJS(){} 25 /** 26 * 静态工厂方法,返还此类惟一的实例 27 * @param name Map集合中的实例"键":的名称 28 * @return 返回登记式单例对象 29 */ 30 public static SingleMode_DJS getInstance(String name) { 31 if(name == null) { 32 name = SingleMode_DJS.class.getName(); 33 } 34 if(map.get(name) == null) { 35 try{ 36 map.put(name, (SingleMode_DJS) Class.forName(name).newInstance()); 37 } catch (InstantiationException e) { 38 e.printStackTrace(); 39 } catch (IllegalAccessException e) { 40 e.printStackTrace(); 41 } catch (ClassNotFoundException e) { 42 e.printStackTrace(); 43 } 44 } 45 return map.get(name); 46 } 47 }
转载于:https://www.cnblogs.com/newwind/p/5652544.html
Java设计模式(学习整理)---单例模式相关推荐
- Java设计模式学习记录-单例模式
前言 已经介绍和学习了两个创建型模式了,今天来学习一下另一个非常常见的创建型模式,单例模式. 单例模式也被称为单件模式(或单体模式),主要作用是控制某个类型的实例数量是一个,而且只有一个. 单例模式 ...
- java基础学习整理(一)
java基础学习整理(一) lesson1: D0s命令: 1.回到根目录,>cd \ 2.复制命令行下的内容,右击标记所要复制的内容,这样就已经复制好了,右击粘贴就可以了. 3.查看,设置环境 ...
- Java设计模式中的单例模式
有时候在实际项目的开发中,我们会碰到这样一种情况,该类只允许存在一个实例化的对象,不允许存在一个以上的实例化对象,我们将这种情况称为Java设计模式中的单例模式.设计单例模式主要采用了Java的pri ...
- Java设计模式学习记录-解释器模式
前言 这次介绍另一个行为模式,解释器模式,都说解释器模式用的少,其实只是我们在日常的开发中用的少,但是一些开源框架中还是能见到它的影子,例如:spring的spEL表达式在解析时就用到了解释器模式,以 ...
- java设计模式学习笔记之装饰模式
java设计模式学习笔记之装饰模式 尊重原创,转载请注明出处,原文地址: http://blog.csdn.net/qq137722697 这是一个使用策略模式和构建模式设计的网络请求框架,去看看吧& ...
- Java - 设计模式学习总结
熟练掌握各种设计模式,并能在实际编程开发中灵活运用它们,不仅能使代码更规范,重用性更高,同时也能保证代码的可靠性,提高开发效率.这段时间又系统看了设计模式的相关内容,整理学习总结如下,文中内容如有表达 ...
- Java设计模式吐血整理
设计模式的类型 根据设计模式的参考书 Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式 - 可复用的面 ...
- 【一】Java 设计模式学习记录: 工厂模式
文章目录 一.设计模式的分类 二.工厂模式 2.1 简单工厂模式 2.1.1 解决的问题 2.1.2 简单工厂模式是什么 2.1.3 优缺点 2.2 工厂方法模式 2.2.1 解决的问题 2.2.2工 ...
- java设计模式系列:单例模式
点击上方"好好学java",选择"置顶公众号" 优秀学习资源.干货第一时间送达! 好好学java java知识分享/学习资源免费分享 关注 精彩内容 java实 ...
- Java设计模式:(二)单例模式
Java设计模式:(二)单例模式 单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式. 意图: 保证一个类仅有一个实例,并提供一个访问它的全局访问点. 主要 ...
最新文章
- halcon的算子清点: Chapter 5 滤波
- Fabric核心模块之Peer解析
- S9306开启web功能!
- 通过计算机二级考试的计划,如何轻松通过国家计算机二级考试
- 计算机网络现在成功,百收计算机网络努力的人是怎么成功的
- url参数中有+、空格、=、%、、#等特殊符号的问题解决
- java之简单的Callback使用总结
- linux 秒数转时间格式,通过delphi将秒数转换成日期格式
- Python学习10 内置属性 对象属性 类属性 私有属性 私有方法 对象方法 类方法 静态方法
- vim学习笔记(4)帮助与配置
- 计算机考研没奖,备战考研本科期间没有什么奖项,考研复试会有影响吗?
- java integer常量池_为什么Integer常量池的行为在127发生变化?
- medoo update mysql_Medoo Update的使用:修改更新数据
- VMware 和 linux镜像文件
- js小游戏之锅打灰太狼
- 按摩新方法(辅助药物治疗肝,肾,肺等慢性疾病)
- 选择适合esx服务器的性能,VMWare ESX Server性能调整
- word wps 出版 常用操作
- 中青网财经:请一位心理学博士当CTO 只有马云敢这么做
- Excel合并单元格怎么分组排序?