码迷,mamicode.com
首页 > 其他好文 > 详细

【设计模式】单例模式的理解与场景举例

时间:2018-10-27 17:40:57      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:饿汉式   应用   管理器   实现   文件   一点   vat   机制   windows   

软件设计常用的一种设计模式 —— 单例模式

体现:在应用这个模式时,单例对象的类必须保证只有一个实例存在。

好处:许多时候整个系统只需要拥有一个全局的对象,这样有利于我们协调整个系统的行为。

场景举例

1.服务器的配置信息放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象读取配置信息,这样也简化了复杂环境下的配置管理。

2.windows的task manager(任务管理器)就是单例的,我们并不能同时打开两个。

3.多线程的线程池一般也是单例模式的,因为线程池要方便对线程进行控制管理。

实现方式

实现单例模式的对象类中构造函数是私有的,这样其他代码就不能通过调用该构造函数实例化对象,只能通过该类的静态方法(通常使用getInstance这个名词)来得到该类的唯一实例。

类别:

不加锁(synchronized)的懒汉单例模式,不支持多线程,实际上也称不上单例模式。

  public class Singleton{

    private Singleton(){

}

  private static Singleton singleton;

  public static Singleton getInstance(){

    if(singleton==null){

       singleton = new Singleton();

    }

     return singleton;

}

}

进化一点点的话,加上synchronized关键词。

public class Singleton{

   private static Singleton singleton;

   private Singleton(){}

   public static synchronized getInstance(){
        if(singletion == null){
   singletion = new Singletion();
          }
          return singletion;
          }
}

或者,但是这样容易产生垃圾。饿汉式倒是加载很快,只是会占据一定内存。

public class Singletion{

  private static Singletion singleton = new Singletion();

  private Singletion(){}

 public static Singletion getInstance(){

   return singleton;

}

}

最好的一种方式,枚举。简洁、且自动支持序列化机制,绝对防止多次实例化。

public enum Singleton{

   INSTANCE;

  public void method(){}

}

 

【设计模式】单例模式的理解与场景举例

标签:饿汉式   应用   管理器   实现   文件   一点   vat   机制   windows   

原文地址:https://www.cnblogs.com/lldyl/p/9862354.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!