zoukankan      html  css  js  c++  java
  • 23种设计模式(1)-单例模式

    定义:

      单例模式,是一种常用的软件设计模式,在它的核心结构中只包含一个被称为单例的特殊类,通过单例模式可以保证系统中一个类只有一个实例,即一个类只有一个对象实例.

    特点:

      1.单例类只能有一个实例

      2.单例类必须自己创建自己的唯一实例

      3.单例类必须给其他对象提供这一实例

    单例模式要点:

      1.私有的构造方法

      2.指向自己实例的私有静态引用

      3.以自己实例为返回值的静态的公有的方法

    单例模式根据实例化对象的时机的不同分为两种:

      1.一种是饿汉式单例,一种是懒汉式单例.

      饿汉式单例在单例被加载的时候,就实例化一个对象交给自己的引用;而懒汉式单例在调用取得实例方法的时候才会实例化对象

      

    public class Singleton{
        private static Singleton singleton = new Singleton();
        private Singleton(){}
        public static Singleton getInstance(){
            return singleton;
        }      
    }

      懒汉式单例

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

    单例模式还有一种双重锁的形式;

    public class Singleton{
         private static volatile Singleton instance = null;
         private Singleton(){
          //do something
         }
         public static Singleton getInsstance(){
               if(instance==null){
                   synchronized(SingletonClass.class){
                        if(instance==null){
                             instance = new Singleton();
                        }
                   }
               }
               return instance;
          }
    }

    如果面对高并发的情况,而且采用的是懒汉式模式,最好的选择就是双重判断加同步的方式.

    单例模式的优点:

      1.在内存中只有一个对象,节省内存空间

      2.避免频繁的创建销毁对象,可以提高性能

      3.避免对共享资源的多重占用

      4.可以全局访问

    单例模式的缺点:

      1.扩展困难,由于getInstance 静态函数没有办法生成子类的实例,如果要扩展,只有重写哪个类.

      2.隐式使用引起类结构不清晰

      3.导致程序内存泄漏的问题

    单例模式注意事项

      只能使用单例类提供的方法得到单例对象,不要使用反射,否则将会实例化一个新的对象

      不要做断开单例类对象与类中静态引用的危险操作

      多线程使用单例使用共享资源时,注意线程安全的问题

  • 相关阅读:
    幂不等式
    一个对数级数的求和
    数列极限
    求幂级数的和函数
    证明整数为平方数
    java获取当前时间戳的方法
    《编程小白的第一本python入门书》笔记 二
    《编程小白的第一本python入门书》笔记 一
    python班级群中的问题记录-2016.12.30
    python班级群中的问题记录-2016.12.22
  • 原文地址:https://www.cnblogs.com/1218-mzc/p/8045974.html
Copyright © 2011-2022 走看看