Java设计模式(三)单例模式:懒汉式与饿汉式

      单例模式又叫做单态模式或者单件模式。在 GOF 书中给出的定义为:保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式中的单例通常用来代表那些本质上具有唯一性的系统组件(或者叫做资源)。比如文件系统、资源管理器等等。

一、懒汉式

package singlepattern;

public class LazySingle {
	private static LazySingle lazysingle;
	private LazySingle(){}
	
	public static LazySingle getinstance(){
		if (lazysingle==null)
			lazysingle = new LazySingle();
		return lazysingle;
	}
}

这种方式不支持多线程

package singlepattern;

public class LazySynchronizedSingle {
	private static LazySynchronizedSingle lazySynchronizesingle;
	public LazySynchronizedSingle(){System.out.println("lazySynchronizesingle!");}
	
	public  synchronized static LazySynchronizedSingle getinstance(){
		if (lazySynchronizesingle==null)
			lazySynchronizesingle = new LazySynchronizedSingle();
		return lazySynchronizesingle;
	}
	
	public static void main(String[] args){
		getinstance();
	}
}

注意获取该实例的方法应该是static的

二、饿汉式

package singlepattern;

public class Singleton {
	private static Singleton singleton = new Singleton();
	private Singleton(){}
	
	public static Singleton getinstance(){
		return singleton;
	}
}

这种方法比较常用,而且是线程安全的。

三、测试实例

首先修改Singleton.java的代码

package singlepattern;

public class Singleton {
	private String name=null;
	private static Singleton singleton = new Singleton();
	private Singleton(){}
	private void setname(String name){
		this.name = name;
	}
	
	public static Singleton getinstance(String name){
		singleton.setname(name);
		return singleton;
	}
	public String getName() {
		return name;
	}
	
}

然后是测试代码

package singlepattern;

public class test {
	public static void main(String[] args){
		Singleton s1 = Singleton.getinstance("duan");
		System.out.println(s1.getName());
		Singleton s2 = Singleton.getinstance("cool");
		System.out.println(s1.getName());
		System.out.println(s1.equals(s2));
	}
}
//测试结果:
duan
cool
true

发现s1与s2打印出来的名字不同(实际上后来修改了名字),然而是一个实例。










你可能感兴趣的:(Java,设计模式)