灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2760回复:0

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

楼主#
更多 发布于:2012-09-08 09:42

单例模式是比较简单的模式,在团队副本中,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加上同步关键字等。




喜欢0 评分0
游客

返回顶部