Java设计模式--单例模式
来源:互联网 发布:淘宝店保健品不让上架 编辑:程序博客网 时间:2024/06/06 03:06
一、单例模式的介绍
Singleton 是一种创建型模式,指某个类采用 Singleton 模式,则在这个类被创二、单例模式 的 特点
建后,只可能产生一个实例供外部访问,并且提供一个全局的访问点。
全局对象和 Singleton 模式有本质的区别,因为大量使用全局对象会使得程
序质量降低,而且有些编程语言根本不支持全局变量。最重要的是传统的全局对
象并不能阻止一个类被实例化多次。
单例类只能有一个实例三、单例模式的应用
单例类必须自己创建自己的唯一实例。
单例类必须给所有其他对象提供这一实例。
每台计算机可以由若干个打印机,但只能有一个 Printer Spooler,避免有两个五、单例模式的举例
作业同时输出到打印机。
一个具有自动编号主键的表可以有多个用户同时使用,但数据库中只能有一
个地方分配下一个主键。否则会出现主键重复。
四、单例 模式 使用的 注意
不要使用单例模式存取全局变量。这违背了单列模式的用意,最好放到对应
类的静态成员中。
不要将数据库连接做成单例,因为一个系统可能与数据库有多个连接,并且
在有连接池的情况下,应当尽可能及时释放连接。Singleton 模式由于使用静
态成员存储类实例,所以可能会造成资源无法及时释放。
(1)
/* 线程安全 但效率比较低 一开始就要加载类new一个 对象
这是饿汉方式的单例模式*/
public class Singleton1 {
private Singleton1(){
}
private static final Singleton1 instance =new Singleton1();
public static Singleton1 getInstancei(){
return instance ;
}
}
(2)
// 饱汉方式的单例模式 但是有多个线程访问时就不是安全的 返回的不是同一
个对象
public class Singleton {
private Singleton(){
}
private static Singleton instance ;
public static Singleton getInstance() {
if ( instance == null)
instance = new Singleton();
return instance ;
}
}
(3)
//虽然是安全的 但是效率非常低在一个时候只有一个线程能访问 同时返回一
个对象
public class Singleton2 {
private Singleton2(){
}
private static Singleton2 instance ;
public static synchronized Singleton2 getInstance() {
if ( instance == null)
instance = new Singleton2();
return instance ;
}
}
(4)
/* 线程安全 并且效率高 能有多个线程访问*/
public class Singleton3 {
private static Singleton3 instance ;
private Singleton3() {
}
public static Singleton3 getIstance() {
if ( instance == null) {
synchronized (Singleton3.class) {
if ( instance == null) {
instance = new Singleton3();
}
}
}
return instance ;
}
}
0 0
- java 设计模式,单例设计模式
- java设计模式-单例设计模式
- java设计模式-单例设计模式
- Java设计模式 单例设计模式
- Java设计模式------单例设计模式
- java设计模式----->单例设计模式
- java设计模式:单例设计模式
- java设计模式-----单例设计模式
- Java设计模式----单例设计模式
- java设计模式-单例设计模式
- java设计模式:单例设计模式
- java 设计模式-单例设计模式
- Java设计模式--单例设计模式
- java设计模式---单例设计模式
- Java设计模式-单例设计模式
- JAVA设计模式:单例设计模式
- java-单例设计模式
- Java设计|单例模式
- 喜羊羊系列之linux网络服务设置(nfs,tftp,samba)
- Leetcode: Linked List Cycle II
- 回调方法2
- Ubuntu 14.04安装Linux源码
- Java基础--简述JRE、JVM、JDK之间的关系与Java基础知识点
- Java设计模式--单例模式
- 【Objective-C学习笔记】核心语法——类的本质、description方法
- 安卓学习笔记01
- 两种方式求1--100以内所有相邻奇偶数之积的和
- Java基础--多线程
- 大家一起来打炮初回放送
- cocos2d-x vs2012 BabeLua安装
- Java基础--输入输出(上篇)
- 最长回文子串 南邮NOJ 1100