您的位置:首页 > 编程语言 > Java开发

浅谈JAVA设计模式之——单例模式(Singleton)

2015-05-02 17:50 477 查看
转载请注明出处:/article/8380667.html

一、概述

保证一个类仅有一个实例,并提供一个访问它的全局访问点。

二、适用性

1.当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。

2.当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。

三、参与者

Singleton 定义一个Instance操作,允许客户访问它的唯一实例。Instance是一个类操作。 可能负责创建它自己的唯一实例。

四、类图



五、示例

Singleton

package com.lyz.design.singleton;
/**
* 创建单例对象的类
* @author liuyazhuang
*
*/
public class Singleton {
/**
* 声明一个静态Singleton类变量
*/
private static Singleton sing;
/**
* 构造方法私有化
*/
private Singleton() {}
/**
* 创建单例对象
* @return
*/
public static Singleton getInstance() {
if (sing == null) {
synchronized (Singleton.class) {
if(sing == null){
sing = new Singleton();
}
}
}
return sing;
}
}


Test

package com.lyz.design.singleton;
/**
* 测试类
* @author liuyazhuang
*
*/
public class Test {

public static void main(String[] args) {
Singleton sing = Singleton.getInstance();
Singleton sing2 = Singleton.getInstance();

System.out.println(sing);
System.out.println(sing2);
}
}


Result

com.lyz.design.singleton.Singleton@11f46b16
com.lyz.design.singleton.Singleton@11f46b16


附加:

1、饱汉模式

package com.cdsmartlink.tea.single;

/**
* 饱汉模式
* @author liuyazhuang
*
*/
public class Singleton {

private Singleton(){
System.out.println("Singleton is create");
}
private static Singleton instance = new Singleton();

public static Singleton getInstance(){
return instance;
}
}


2、饿汉模式

package com.cdsmartlink.tea.single;

/**
* 饿汉模式
* @author liuyazhuang
*
*/
public class LazySingleton {

private LazySingleton(){
System.out.println("LazySingleton is create");
}

private static LazySingleton instance;

public static LazySingleton getInstance(){
if(instance == null){
synchronized (LazySingleton.class) {
if(instance == null){
instance = new LazySingleton();
}
}
}
return instance;
}
}


3、内部类模式

package com.cdsmartlink.tea.single;

/**
* 内部类模式
* @author liuyazhuang
*
*/
public class StaticSingleton {

private StaticSingleton(){
System.out.println("StaticSingleton is create");
}

private static class SingletonHodler{
private static StaticSingleton instance = new StaticSingleton();
}

public static StaticSingleton getInstance(){
return SingletonHodler.instance;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: