例题
package cn.taxue;
/**
* 单例设计模式
* @author taxue
*
*/
public class Singleton {
private static Singleton uniqueInstance = null;
private Singleton(){ //避免类外部被实例化
}
public static Singleton getInstance(){
if(uniqueInstance == null){
uniqueInstance = new Singleton();
}
return uniqueInstance;
}
}
单例代码的实现
package cn.taxue;
public class TestStream {
String name = null;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// 构造方法
private TestStream() {
}
private static TestStream ts1 = null;
public static TestStream getTest() {
if (ts1 == null) {
ts1 = new TestStream();
}
return ts1;
}
public void printInfo(){
System.out.println("this name is "+ name);
}
}
package cn.taxue;
public class TMain {
public static void main(String[] args) {
TestStream ts1 = TestStream.getTest();
ts1.setName("王乾坤");
TestStream ts2 = TestStream.getTest();
ts2.setName("踏雪");
ts1.printInfo();
ts2.printInfo();
if (ts1 == ts2) {
System.out.println("创建的是一个实例");
} else {
System.out.println("创建的不是一个实例");
}
}
}
代码运行:
this name is 踏雪
this name is 踏雪
创建的是一个实例
结论:证明单例模式为一个面向对象的应用程序提供了对象惟一的访问点,不管它实现何种功能,整个应用程序都会同享一个实例对象。
1.饿汉式单例类
/**
* 饿汉式单例类.在类初始化时,已经自行实例化
* @author taxue
*
*/
public class Ehanshi {
// 私有默认构造
private Ehanshi(){}
//已经自行实例化
private static final Ehanshi ehashi = new Ehanshi();
//静态工厂方法
public static Ehanshi getEhanshi(){
return ehashi;
}
}
2.懒汉式单例类
package cn.taxue;
/**
* 懒汉式单例类.在第一次调用的时候实例化
*
* @author taxue
*
*/
public class Lanhanshi {
// 私有的默认构造子
private Lanhanshi() {
}
private static Lanhanshi lanhanshi = null;
// 静态工厂方法
public synchronized static Lanhanshi getIlanhanshi() {
if (lanhanshi == null) {
lanhanshi = new Lanhanshi();
}
return lanhanshi;
}
}