你的位置:首页 > 操作系统

[操作系统]设计模式之Singleton单态


1.概念

1.在Java应用程序中,一个类Class只能有一个实例存在

2.一个实例

1) 私有的构造方法

2) 私有的静态实例

3) 公有静态的访问方式

1) 防止创建新的实例

2) 防止修改

3) 必需能够获取

public class Singleton {	// 1.私有的构造方法	private Singleton() {	}	// 2.私有的静态实例变量	private static Singleton sl = new Singleton();	// 3.公有静态的访问方法	public static Singleton getsingleton() {		return sl;	}}

1.恶汉与懒汉

1.恶汉

一开始就创建对象

1)提前创建对象

2.懒汉

有需求就创建对象

1)使用方法时才创建对象

3.恶汉

4.懒汉

public class badmash {	// 1.私有的构造方法	private badmash() {	}	// 2.私有的静态实例变量	private static badmash bmBadmash = new badmash();	// 3.公有的静态访问方法	public static badmash getBadmash() {		return bmBadmash;	}}

public class sluggard {	// 1.私有的构造方法	private sluggard() {	}	// 2.私有的静态变量实例	private static sluggard sg = null;	// 3.公有的静态访问方法	public static sluggard getSluggard() {		if (sg == null) {			sg = new sluggard();		}		return sg;	}}

1) 恶汉是线程安全的

1) 懒汉线程是不安全的

1.线程安全

1) 线程同步的作用:把代码控制,让线程排队执行、

同步关键字

同步代码块

public class sluggard_synchro {

// 1.私有的构造方法

private sluggard_synchro() {

 

}

 

// 2.私有的静态变量实例

private static sluggard_synchro sg = null;

 

// 3.公有的静态访问方法

public static synchronized sluggard_synchro getSluggard() {

if (sg == null) {

sg = new sluggard_synchro();

}

return sg;

}

}

public class sluggard_code {

// 1.私有的构造方法

private sluggard_code() {

 

}

 

// 2.私有的静态变量实例

private static sluggard_code sg = null;

 

// 3.公有的静态访问方法

final private static Object OBJECT = new Object();

 

public static sluggard_code getSluggard() {

synchronized (OBJECT) {

if (sg == null) {

sg = new sluggard_code();

}

}

return sg;

}

}

效率偏低

4.双重锁

 

public class sluggard_bilayer {

// 1.私有的构造方法

private sluggard_bilayer() {

 

}

 

// 2.私有的静态变量实例

private static sluggard_bilayer sg = null;

 

// 3.公有的静态访问方法

final private static Object OBJECT = new Object();

 

public static sluggard_bilayer getSluggard() {

if (sg == null) {// 条件1

synchronized (OBJECT) {

if (sg == null) {// 条件2

sg = new sluggard_bilayer();

}

}

}

return sg;

}

}

 

注:Android系统级别的服务通常都是一个实例的设计,即单例。