zoukankan      html  css  js  c++  java
  • 单例模式

    一些人总结出来的用于解决特定问题的固定的解决方案。

    解决一个类在内存中只存在一个对象的目的,保证对象的唯一性

    1、为了避免其他程序建立过多的该类对象,禁止其他程序建立该类对象

    2.为了其他方便其他程序的访问,在本类中自定义一个对象

    3.为方便其他程序对自定义类对象的访问,对外提供一些访问方式.

    创建方法:

    1.将构造函数私有化。这样别人就不能创建该类的对象。

    2.在类中创建一个私有的本类对象。

    3、提供一个用类名调用的共有的方法来获取唯一的私有对象。

     1 class Single
     2     {
     3         private static Single s = new Single();//恶汉式
     4         private Single()
     5         {
     6         }
     7         public static Single getSingle()
     8         {
     9             return s;
    10         }
    11 
    12     }    
    13     class Single
    14     {
    15         private static Single s = null;//懒汉式
    16         private Single()
    17         {
    18         }
    19         public static Single getSingle()
    20         {
    21             if(s == null)
    22                 s = new SIngle();
    23             return s
    24         }
    25 
    26     }

    懒汉模式public static Single s; 这样做的意思是,你的这个单例类别人不一定使用,所以没必要提前定义,可能你定义了别人用不到,懒汉之处,在于什么时候使用,是么时候在创建这个对象。

    推荐使用恶汉单例模式。懒汉单例模式,可能会出现线程方面的问题。

    懒汉模式的单例模式的线程安全问题,之前介绍过单例模式的两种类型,恶汉模式和懒汉模式,当时就有提到懒汉模式的单例模式存在线程安全问题。下面是一种,既考虑线程安全问题又考虑效率问题的解决方案.

     1 Class Single
     2 {
     3 Private Single s;
     4 Private Single(){}
     5 Public Single getSingle()
     6 {
     7 If(s == null)
     8 {
     9 Synchronized(“锁”)
    10 {
    11 If(s == null)
    12 {
    13 S = new Single();
    14 }
    15 }
    16 }
    17 Return s;
    18 }
    19 }

    其实,上面加完锁之后就可以保证线程安全了,但是为了提高效率,在外面又加了一层判断,这个可以分析一下,第一次的效率慢一点,以后的效率还是很快的。

  • 相关阅读:
    Markdown引用图片,且不使用网上链接的解决方法
    测试
    sudo用户权限添加问题
    windows安装ipython
    ansible基本操作
    mysql用户权限操作
    解决windows7系统的快捷方式无法添加到任务栏
    linux下查看磁盘分区的文件系统格式
    mail客户端POP和IMAP协议
    linux设置history历史记录
  • 原文地址:https://www.cnblogs.com/OliverZhang/p/6027198.html
Copyright © 2011-2022 走看看