各语言中的单例模式都大同小异。私有化类的构造方法;用静态变量保存创建的实例;可直接或用方法向外提供这个实例;其它的比如PHP中还需要加一个私有化克隆方法防止类被克隆而成非单例。本文地址:http://www.04007.cn/article/908.html,未经许可,不得转载.
java中单例模式可以使用的方法如下:本文地址:http://www.04007.cn/article/908.html,未经许可,不得转载.
1. 饿汉式: 直接创建实例对象,而不管这个对象是否真实需要。本文地址:http://www.04007.cn/article/908.html,未经许可,不得转载.
//饿汉式创建单例 package com.kermit.test; //静态成员直接实例化单例模式 public class Singleton { //防止被修改建议使用final这种写法 public final static Singleton INSTANCE = new Singleton(); private Singleton(){}; } //静态代码块中实现单例模式 class Singleton1{ public static Singleton1 singleton1; //此方法适用于需要从外部加载数据进来实例化 static{ singleton1 = new Singleton1(); } private Singleton1(){}; } //枚举类型单例模式:要求JDK1.5之后 enum Singleton2{ INSTANCE; public void show(){ System.out.println("this is Singleton2"); } } //关于两个对象的比较测试就不写了,这里测试关注一下枚举类的打印 package com.kermit.test; import org.junit.jupiter.api.Test; public class TestBase { @Test public void getInstance(){ //枚举类型直接使用INSTANCE代表单例,打印出来时只显示INSTANCE,因为其toString方法已重写 Singleton2 singleton2 = Singleton2.INSTANCE; System.out.println(singleton2); singleton2.show(); } }本文地址:http://www.04007.cn/article/908.html,未经许可,不得转载.
2.懒汉式实现单例模式本文地址:http://www.04007.cn/article/908.html,未经许可,不得转载.
懒汉式实现单例模式的要点在延迟创建实例对象,类初始化不会实现对象,只有在通过方法调用的时候才会去实现和获取这个实例对象。本文地址:http://www.04007.cn/article/908.html,未经许可,不得转载.
//懒汉式实现单例模式 package com.kermit.test; public class Singleton3 { private static Singleton3 singleton3; private Singleton3(){}; //不过这种方法只适合于单线程,如多线程需再用synchronized public static Singleton3 getInstance(){ if(singleton3 == null){ singleton3 = new Singleton3(); } return singleton3; } } //通过内部类的初始化来实现单例 class Singleton4 { private Singleton4(){} public static class tool{ public static final Singleton4 singleton4 = new Singleton4(); } public static Singleton4 getInstance(){ return tool.singleton4; } }本文地址:http://www.04007.cn/article/908.html,未经许可,不得转载.
本文地址:http://www.04007.cn/article/908.html 未经许可,不得转载. 手机访问本页请扫描右下方二维码.
![]() |
![]() |
手机扫码直接打开本页面 |