单例模式
来源:互联网 发布:js如何获取单选框的值 编辑:程序博客网 时间:2024/06/14 11:16
参考菜鸟博客,网址:http://www.runoob.com/design-pattern/singleton-pattern.html
单例模式:当您想控制实例数目,节省系统资源的时候。
应用实例:windows是多进程多线程,在操作文件时可能有多个进程或者线程同时操作一个文件,所以,所有的文件必须通过唯一的实例来进行。
我们将创建一个 SingleObject 类。SingleObject 类有它的私有构造函数和本身的一个静态实例。
SingleObject 类提供了一个静态方法,供外界获取它的静态实例。SingletonPatternDemo,我们的演示类使用SingleObject 类来获取SingleObject 对象。
实例1
public class SingleObject { //创建 SingleObject 的一个对象 private static SingleObject instance = new SingleObject(); //让构造函数为 private,这样该类就不会被实例化 private SingleObject(){} //此方法阻止了,该类被实例化,即不可 SingleObject object = new SingleObject(); //获取唯一可用的对象 public static SingleObject getInstance(){ return instance; } public void showMessage(){ System.out.println("Hello World!"); }}
获取:
public class SingletonPatternDemo { public static void main(String[] args) { //不合法的构造函数 //编译时错误:构造函数 SingleObject() 是不可见的 //SingleObject object = new SingleObject(); //获取唯一可用的对象 SingleObject object = SingleObject.getInstance(); //显示消息 object.showMessage(); }}
几种实现方式:
1懒汉式
线程不安全
public class Singleton { private static Singleton instance; //实例化,在需要时才实例化,故懒 private Singleton (){} public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }
线程安全-加锁,保证了单例,但加锁影响效率
public class Singleton { private static Singleton instance; private Singleton (){} public static synchronized Singleton getInstance() { //添加锁 if (instance == null) { instance = new Singleton(); } return instance; } }
二。饿汉式
线程安全-无锁,执行效率高
public class Singleton { private static Singleton instance = new Singleton(); private Singleton (){} public static Singleton getInstance() { return instance; } }
三、双检锁/双重校验锁(DCL,即 double-checked locking)
线程安全,且运行效率高
public class Singleton { private volatile static Singleton singleton; private Singleton (){} public static Singleton getSingleton() { if (singleton == null) { synchronized (Singleton.class) { if (singleton == null) { singleton = new Singleton(); } } } return singleton; } }
。。。。。很多,,,,,
0 0
- 单例、单例模式
- 单例模式-多线程单例模式
- 单件模式(单例模式)
- 设计模式------单例模式
- 设计模式------单例模式
- 设计模式-单例模式
- 设计模式 - 单例模式
- 设计模式---单例模式
- 设计模式---单例模式
- PHP模式-单例模式
- 【设计模式】单例模式
- 设计模式-单例模式
- 设计模式----单例模式
- 设计模式--单例模式
- 设计模式-单例模式
- 单例模式(单子模式)
- 设计模式-单例模式
- [设计模式] 单例模式
- 关于java jni调用c++动态库的一些问题及解决方法
- 15.7 Swift全局引用
- 正则表达式matcher.group用法
- MFC STATIC,Picture控件使用及无法添加变量的问题
- js操作 cookie
- 单例模式
- 完全卸载干净MySQL
- linux系统下(x86_64)安装jdk 1.6(jdk-6u45-linux-x64.bin)
- Spring4MVC+Spring4+Hibernate4整合系列--(二)StepByStep2
- Android动态权限判断以及动态权限申请
- Apache kylin安装配置
- 5.3.2
- NSArray
- Android工具类(时间转换)