您的位置:首页 > 其它

单例设计模式-饿汉式-懒汉式

2015-01-22 16:12 232 查看
设计模式

解决某一类问题最行之有效的方法。

 java中目前共有23种设计模式

 

单例设计模式

解决一个类在内存中只存在一个对象

 

单例模式设计思想

1. 禁止其他外部类或对象创建该类的实例。

2. 为了能生成该类的对象,在本类中自己创建一个对象。

3. 为让其他程序可以访问该类的对象,提供一个外部可以访问的get方法。

 

单例设计模式实现步骤

1. 将构造函数私有化。

2. 在类中创建一个自己的对象。(因为调用该对象的get方法为static的,static方法只能访问static变量,故此对象的引用应该声明为static)

3. 提供一个该对象的静态get方法。

 

饿汉式&懒汉式区别
推荐使用饿汉式,因为懒汉式存在多线程的安全问题。

如果非要使用懒汉式,则在其static getInstance方法中,加锁,其锁为本类的字节码文件。

饿汉式:
package com.lxh.designmode;

public class SingleDemo {

public static void main(String[] args) {
Single s1 = Single.getInstance();
Single s2 = Single.getInstance();

s1.setNum(23);
System.out.println(s2.getNum());
}

}

class Single {
// 1. 将构造函数私有化
private Single() {};

// 2. 在本类中创建该实例,并设置为私有,static
private static Single s = new Single();

// 3. 提供一个static get方法,让外部类访问。
public static Single getInstance() {
return s;
}

private int num ;

public int getNum() {
return num;
}

public void setNum(int num) {
this.num = num;
}

}

懒汉式:
创建步骤:

1. 私有化构造方法

2. 在本类中创建引用,赋予空对象。(private static)

3. 为使外部使用该对象,提供一个静态getInstance()方法。在方法中判断对象是否为null,当对象为空时,创建该对象,赋给上面声明的引用。

class Single {
private Single() {}
private static Single s = null;
// 当多线程调用该getInstance()方法的时候,会出现线程安全问题,需要加锁。
public static Single getInstance() {
// 同步静态函数的锁是该类的字节码文件 即 Single.class
synchronized(Single.class) {
if(s == null)
s = new Single();
}
return s;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息