zoukankan      html  css  js  c++  java
  • 入门设计模式之单例

    学习更多设计模式请参考:入门设计模式之汇总篇

     

     

    了解单例模式之前我们先来了解一下单例模式的三个要点:

    1.一个类只能有一个实例(就是只需要new一次呗)

    2.它必须自行创建这个实例(就是构造方法不对外暴露呗)

    3.它必须向整个系统提供这个实例(就是获取实例的方法是静态的呗)

    其实通过分析上方三个要点我们就已经了解了单例模式了。也就是说我们只要满足上方的要求就算是一个单例了。

     

    按照上方的要点这里给出几个例子供大家参考一下:

     

    饿汉式:

    public class HungrySingle {
    
        private static final HungrySingle single=new HungrySingle();
    
        private HungrySingle(){ }
    
        public static HungrySingle getInstance() {
            return single;
        }
    
    }
    

    观察上述代码我们可以发现,饿汉式单例模式可能是最直观的体现出单例模式的要点的一种写法了。不过呢,这种写法并不是很完美。例如当同一个jvm拥有多个类加载器时,如果多个加载器同时加载这个类的话就会出现多个实例。

    懒汉式:

    public class lazySingle {
    
        private static lazySingle single;
    
        private lazySingle(){}
    
        public static synchronized lazySingle getInstance() {
            if(single==null){
                single=new lazySingle();
            }
            return single;
        }
    }
    

    不同于饿汉式的加载类时就实例化出对象,懒汉式就解决了饿汉式可能出现的多次加载问题,它把实例化的时机选择在了调用时。不过呢,它同样也存在一定的局限性。例如当单例类作为资源时,并且这个资源在进行初始化还很慢的时候,当有多个线程请求此类将会带来一些负面影响。

    结语:

    其实我们可以在网上看到很多关于单例模式的文章,例如单例的n种写法、你一直再用的哪个单例是错的等等一类的文章。我在这里给大家一个忠告:我们这些写文章的人也是和大家一样的人,我们也可能会犯错。当你看到一篇文章时不要忙着去吸收,先按照你自己的想法去验证一下。就比如单例模式,看看很多写法满足了三个要点吗?

  • 相关阅读:
    UICollectionView 布局
    ios 调用支付宝
    iOS POST 上传图片
    ios 判断字符串是否为空
    让写代码成为每天的习惯
    gocron_跨平台定时任务管理器
    monkey做安卓APP的黑盒自动化测试
    Android自动化测试框架分析
    联合查询中where 和and的区别
    JIRA中导出BUG列表是CSV格式的,打开后是乱码
  • 原文地址:https://www.cnblogs.com/zhixiang-org-cn/p/9248991.html
Copyright © 2011-2022 走看看