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

      单例模式是为了解决某些要确保对象的唯一性的问题存在的。

      我举一个不恰当的例子,比如说许嵩这个人,这个对象。我先new出了一个许嵩,让他去唱歌去了。这个时候别人也new出了一个许嵩,让他旅游去了。那么现在许嵩的听众们想获取许嵩最近的状态,有的说许嵩在唱歌,有的说许嵩在旅游我们还合影了。这就造成了不统一的现象,造成了混乱。为了避免这种混乱,有效的解决方法只有一个,就是保证对象的唯一性!

      许嵩,只能有一个。这样无论他是在做菜还是在写歌还是在遛狗都是ok的,听众们在同一时间获取到的许嵩的行迹都是统一的。在Vae+发表的讨论帖子也是和谐的。

      我举了一个不是很恰当的例子,就是为了说明,在想要对象保持唯一性的时候,就要使用单例模式了。下面来看看代码

      例如,我写了一个类,叫Single。我现在可以随便的去new对象出来,例如:

    package com.company;
    
    public class Main {
    
    
        public static void main(String[] args) {
            System.out.println("大家好,我是Vae");
    
            Single s1=new Single();
            Single s2=new Single();
            Single s3=new Single();
            Single s4=new Single();
    
        }
    }
    
    class Single{
    
    }

    我直接new了4个对象出来,我很方的。怎么才能只让别人new一个对象出来,只使用一个对象去访问资源呢?可以这样写:

    package com.company;
    
    public class Main {
    
    
        public static void main(String[] args) {
            System.out.println("大家好,我是Vae");
    
            Single.getInstance().Print();
    
        }
    }
    
    class Single{
    
        private static final Single  m_instance=null;
    
        private Single(){}
    
        public static Single getInstance()
        {
            if ( m_instance== null) {
                m_instance=new Single();
            }
            return m_instance;
        }
    
        public void Print()
        {
            System.out.println("通过单例去调用我吧");
        }
    
    }

    其实,这就是单例模式了,由于我的构造函数是私有的,别人无论如何也不能去new对象了,只能乖乖的去调用getInstance方法去获取我的对象,这样就保证了我的对象的唯一性。

     关于单例模式,有一个饿汉式和懒汉式的区分,就是在于你是先加载对象,还是等你调用方法的时候再加载对象。如下图所示:

    我写的例子是懒汉式的,这个其实无所谓,在实际开发的过程中,饿汉式其实用的比较多,因为单例模式你既然写了肯定是要用的,直接new出对象就ok了,不要担心什么先new对象会不会占用内存啥的。

  • 相关阅读:
    JDBC面试问题
    Linux下如何实现MySQL数据库每天自动备份定时备份
    Linux下如何实现MySQL数据库每天自动备份定时备份
    Linux下如何实现MySQL数据库每天自动备份定时备份
    Random Forest And Extra Trees
    经济学十大原理
    JavaScript的执行机制
    单元测试
    JavaScript是如何工作的(一)
    阿里大数据竞赛season1 总结
  • 原文地址:https://www.cnblogs.com/yunquan/p/9750504.html
Copyright © 2011-2022 走看看