Java设计模式之Singleton单例模式篇
Java设计模式之Singleton单例模式篇
java 单例模式的实现方式
实现1:
public class Singleton {
private static Singleton instance;
private Singleton (){ //首先有一个私有的构造器
}
public static Singleton getInstance() {
if(instance==null){
instance=new Singleton ();
}
return instance;
}
}
这种方式是线程不安全的,如果多个线程同时访问的话就可能有多个对象产生,如果在get方法中加同步块的话会影响性能。
实现2:
public class Singleton {
private Singleton(){
}
private static Singleton instance =new Singleton();
public static Singleton getInstance(){
return instance;
}
}
这种方式虽然不存在安全性问题,但是在程序启动的时候就会初始化。
实现3:
public class Singleton {
private static class SingletonHolder {
static Singleton instance = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.instance;
}
}
3种方式中这是最好的解决方案,既解决了线程同步的问题,有在调用的时候才初始化。
单例模式主要有3个特点,:
1、单例类确保自己只有一个实例。
2、单例类必须自己创建自己的实例。
3、单例类必须为其他对象提供唯一的实例。
什么时候使用单例模式?
单例模式也是一种比较常见的设计模式,它到底能带给我们什么好处呢?其实无非是三个方面的作用:
第一、控制资源的使用,通过线程同步来控制资源的并发访问;
第二、控制实例产生的数量,达到节约资源的目的。
第三、作为通信媒介使用,也就是数据共享,它可以在不建立直接关联的条件下,让多个不相关的两个线程或者进程之间实现通信。
比 如,数据库连接池的设计一般采用单例模式,数据库连接是一种数据库资源。软件系统中使用数据库连接池,主要是节省打开或者关闭数据库连接所引起的效率损 耗,这种效率上的损耗还是非常昂贵的。当然,使用数据库连接池还有很多其它的好处,可以屏蔽不同数据数据库之间的差异,实现系统对数据库的低度耦合,也可
相关文档:
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet. ......
package com.qiao.java;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Iter ......
JAVA实现
在JDK中,在java.util.zip包中已经内置了ZLIB的实现,示例代码如下:
1//解压
2 public String decompressData(String encdata) {
3 try {
4 ByteArrayOutputStream bos = new ByteArrayOutputStream();
5 InflaterOutputStream zos = new InflaterOutputStream(bos);
6 zo ......
本文面向于那些软件架构师,设计师和开发人员,他们想使用 IBM® Rational® Software Architect 从 Java™ 源代码来逆向工程生成 UML 类和序列图。 逆向工程经常被用来从已有的源代码中以一种抽象模型 UML 格式来获得丢失的设计文档,其可以用来研究一个系统的静态结构和动态行为,并用于扩展新的特性到产品。 ......
今天要写个远程重启服务的功能,为了开发速度,暂时定为Java代码+WMIC命令的方法,简单的说,就是利用Java调用本机应用程序的方法。涉及到的Java类有java.lang包里面的Runtime、Process、ProcessBuilder三个类,以及wmic中重启服务的命令。因为之前也写过这方面的东西,所以很习惯性的写出了代码:
&nb ......