设计模式--创建模式--单例模式--java(二)

2014-11-24 11:15:00 · 作者: · 浏览: 3
[] args) throws IOException, ClassNotFoundException {
Singleton3 s1 = Singleton3.getInstance();
Singleton3 s2 = Singleton3.getInstance();
System.out.println(s1 == s2);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(s1);
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bis);
Singleton3 s3 = (Singleton3) ois.readObject();
System.out.println(s1 == s3);
}
}
java中实现单例最佳方式。具体细节查阅thinking in java
[java]
public enum Singleton {
Instance;
static public Singleton getInstance(){
return Instance;
}
public int method1(){
return 1;
}
public int method2(){
return 2;
}
}
可拓展的单例。
[java]
/**
*
* @author changsheng
*/
public class SingletonExtends {
static private final SingletonExtends singleton = new SingletonExtends();
protected SingletonExtends(){
}
static public SingletonExtends getInstance() {
return singleton;
}
public void method(){
}
}
[java]
public class SingletonExtendsEx extends SingletonExtends {
static private final SingletonExtendsEx singleton = new SingletonExtendsEx();
static public SingletonExtendsEx getInstance() {
return singleton;
}
private SingletonExtendsEx() {
super();
}
public void method1() {
}
public void method2() {
}
}
注意事项:在使用单例时,一定要保证确实只需要一个实例对象。
在javaWeb中,Servlet在什么时候是单实例,什么时候是多实例?为什么要做成单实例?
1、线程安全(当然在编写Servlet时候需要遵守一些约定,譬如servlet中尽量不要有共享的实例变量,如果有就需要进行并发控制)。
2、避免过多的垃圾对象。