java设计模式之五:单例模式
3211 点击·0 回帖
![]() | ![]() | |
![]() | 单例模式是比较简单的模式,在团队副本中,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加上同步关键字等。 | |
![]() | ![]() |