首页 > 程序开发 > 软件开发 > Java >

java设计模式之五:单例模式

2012-05-11

单例模式是比较简单的模式,在团队副本中,BOSS被击杀之后,每个队员我摸尸体,看到的掉落装备都是一样的,此时这个BOSS的尸体就可以用单例模式实现。在尸体未消失之前,即使你除了副本,然后再进来,还是这具尸...

单例模式是比较简单的模式,在团队副本中,BOSS被击杀之后,每个队员我摸尸体,看到的掉落装备都是一样的,此时这个BOSS的尸体就可以用单例模式实现。在尸体未消失之前,即使你除了副本,然后再进来,还是这具尸体。
单例模式的特征是某个对象只有唯一实例存在。

实现单例模式的要点有几个:

1.该类本身构造私有化

2.自己创建一个实例,然后提供接口给外部访问


[java] package single;

public class Boss {

private static Boss boss;

/**
* DOC 构造函数私有化,防止外部调用生成多个实例.
*/
private Boss() {
}

/**
* DOC 提供接口给外部访问获取单例.
*
* @return
*/
public static Boss getInstance() {
if (boss == null) {
boss = new Boss();
}
return boss;
}

public void speak() {
System.out.println("我是伊利丹,我的编号是:" + boss.hashCode());
}

}
package single;

public class Boss {

private static Boss boss;

/**
* DOC 构造函数私有化,防止外部调用生成多个实例.
*/
private Boss() {
}

/**
* DOC 提供接口给外部访问获取单例.
*
* @return
*/
public static Boss getInstance() {
if (boss == null) {
boss = new Boss();
}
return boss;
}

public void speak() {
System.out.println("我是伊利丹,我的编号是:" + boss.hashCode());
}

}

测试类:

[java]package test;

import single.Boss;

public class SingleTest {

public static void main(String[] args) {
Boss boss1 = Boss.getInstance();
Boss boss2 = Boss.getInstance();

boss1.speak();
boss2.speak();
}

}
package test;

import single.Boss;

public class SingleTest {

public static void main(String[] args) {
Boss boss1 = Boss.getInstance();
Boss boss2 = Boss.getInstance();

boss1.speak();
boss2.speak();
}

}

测试结果:

我是伊利丹,我的编号是:25860399
我是伊利丹,我的编号是:25860399

另外,关于什么时候初始化这个实例,可以再有请求需要的时候初始化,也可以在类加载的时候就初始化。此外,如果在多线程中使用单例模式,要考虑下安全性的问题。比如需要在getInstance加上同步关键字等。


摘自 a107494639的专栏
相关文章
最新文章
热点推荐