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

java单例模式

2015-11-18 12:06 591 查看
一、单例模式

java是一种静态语言,java中单例模式是一种常见的设计模式,单例模式有2种:(1)懒汉式单例、(2)饿汉式单例、(3)登记式单例。

二、单例模式特点:

   1、单例类只能有一个实例。

  2、单例类必须自己自己创建自己的唯一实例。

  3、单例类必须给所有其他对象提供这一实例。

三、3种单例模式

1、饿汉式

/**

*

*@类功能说明:饿汉式单例模式

*@修改人员名: yang

*@修改日期: 2015-11-18 下午01:33:55

*@修改内容:

*@修改次数:

*@创建时间: 2015-11-18 下午01:33:55

*@版本:V1.0

*/

public class TestInstence {

//私有化构造方法

private TestInstence(){}

//自己实例化

private static final TestInstence testInstence=new TestInstence();

//静态方法

public static TestInstence getInstence(){

return testInstence;

}

//测试

public static void main(String args[]){

TestInstence ts=new TestInstence();

System.out.println(ts);

}

}

2、懒汉式

/**

*

*@类功能说明:测试懒汉式单例模式

*@修改人员名: yang

*@修改日期: 2015-11-18 下午01:42:31

*@修改内容:

*@修改次数:

*@创建时间: 2015-11-18 下午01:42:31

*@版本:V1.0

*/

public class TestInstenceLazy {

//私有化构造方法

private TestInstenceLazy(){}

//自己实例化,不用final修饰

private static TestInstenceLazy testLazy=null;

//提供方法

public synchronized static TestInstenceLazy getLazy(){

//判断是否已经有对象

if(testLazy!=null){

testLazy=new TestInstenceLazy();

}

return testLazy;

}

//测试

public static void main(String args[]){

TestInstenceLazy ts=new TestInstenceLazy();

System.out.println(ts);

}

}

3、登记模式

import java.util.HashMap;

import java.util.Map;

/**

*

*@类功能说明:登记式单例模式

*@修改人员名: yang

*@修改日期: 2015-11-18 下午04:57:02

*@修改内容:

*@创建时间: 2015-11-18 下午04:57:02

*@版本:V1.0

*/

public class TestInstenceRegister {

private static Map<String, TestInstenceRegister> map = new HashMap<String, TestInstenceRegister>();

// 静态代码块,保证只初始化一次

static {

TestInstenceRegister tig = new TestInstenceRegister();

map.put(tig.getClass().getName(), tig);

}

// 保护构造方法

protected TestInstenceRegister() {}

// 静态方法,返回唯一的实例对象

public static TestInstenceRegister getInstence(String name) {

if (name == null) {

name = TestInstenceRegister.class.getName();

System.out.println("name == null" + "--->name=" + name);

}

if (map.get(name)==null) {

try {

map.put(name, (TestInstenceRegister) Class.forName(name).newInstance());

} catch (Exception e) {

e.printStackTrace();

}

}

//返回根据键得到的值对象

return map.get(name);

}

//例子

public String test(){

return "testName";

}

//测试

public static void main(String args[]){

TestInstenceRegister tig=TestInstenceRegister.getInstence(null);

System.out.println("类加载后的map结果:"+map);

System.out.println("调用方法后的结果:"+tig.test());

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: