我学习的java单例模式
来源:互联网 发布:esprit淘宝 编辑:程序博客网 时间:2024/05/10 02:24
首先讲解下单例模式:
单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。
作为对象的创建模式[GOF95], 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。
显然单例模式的要点有三个:
一是某个类只能有一个实例
二是它必须自行创建这个实例
三是它必须自行向整个系统提供这个实例(其实这里个人认为不不是完全正确,但是在ssh中使用的时候,是没有我就new一个,所以在整个系统中不止一个对象,但是绝对不会同时出现两个或以上对象、实例)
单例模式的应用场景:
①、一些资源管理常常设计成单例模式:比如读取配置文件时候使用单例,应当由一个对象来管理一个属性文件
②、可以使用单例实现缓存机制:把多次生成的文件、对象等资源放在单例的成员变量中,相同条件下,从单例的成员变量中获取(这里的成员变量可以是集合、map等容器)
优点:节约内存(只有一个实例)
缺点:打破了java的设计原则,即多态,因为单例不能被外部new了,所以单例的构造方法时private的,也就不能被继承了,最终打破了多带原则
单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。总之,选择单例模式就是为了避免不一致状态,避免政出多头。
首先看一个经典的单例实现。
//懒汉模式 用时才创建
public class Singleton {
private static Singleton uniqueInstance = null;
private Singleton() {
// Exists only to defeat instantiation.
}
public static Singleton getInstance() {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
return uniqueInstance;
}
// Other methods...
}
//饿汉式单例类.在类初始化时,已经自行实例化
2 public class Singleton1 {
3 //私有的默认构造子
4 private Singleton1() {}
5 //已经自行实例化
6 private static final Singleton1 single = new Singleton1();
7 //静态工厂方法
8 public static Singleton1 getInstance() {
9 return single;
10 }
11 }
- 我学习的java单例模式
- 我的设计模式学习笔记------>单例模式(Singleton)
- 我理解的java设计模式之单例模式
- 我的Java设计模式-单例模式
- 我所了解的java单例模式
- 学习:java 单例模式
- java学习--单例模式
- java单例模式学习
- Java单例模式学习
- 我的Java开发学习之旅------>Java双重检查锁定及单例模式详解(转)
- java中的设计模式的学习?单例模式
- java设计模式学习-单例模式
- 我的设计模式学习之路1(单例模式)
- 我的设计模式学习之路一——单例模式
- 单例模式的学习
- 单例模式的学习
- 我对单例模式的理解
- 我所理解的单例模式
- JPA 继承方式
- CentOS 6.4安装配置LAMP服务器(Apache+PHP5+MySQL) 详细出处参考:http://www.jb51.net/article/37987.htm
- 创建多级目录
- 第十七周-(项目一(2))从大到小排列三个数。(引用方法)
- android系统开发(九)-Audio部分准备工作alsa移植
- 我学习的java单例模式
- MySQL数据库中 int 长度最大是多少?
- jetty按照及配置
- STM32数据类型定义
- 磁盘分区管理
- 五月 25th, 2012设置UIButton的文字显示位置、字体的大小、字体的颜色
- Android学习笔记三--列表选择框(Spinner)
- java截取字符串,截串,substring和split,分割字母和数字,正则缝隙
- getline可以读取\r\n,\n读取行