首页 > 其他 > 详细

23种设计模式(1):单例模式

时间:2019-03-25 21:05:35      阅读:131      评论:0      收藏:0      [点我收藏+]

定义

  单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

结构:

  • 指向自身的静态实例的私有静态引用
  • 私有构造函数
  • 返回自身实例的公有构造函数

类图:

技术分享图片

实现:

  1.饿汉式单例

技术分享图片
public class EagerSingleton {

    //指向自己实例的私有静态引用
    private static EagerSingleton eagerSingleton = new EagerSingleton();

    //私有的构造方法
    private EagerSingleton(){};

    //以自己实例为返回值的静态公有方法
    public static  EagerSingleton getInstance(){
        return  eagerSingleton;
    }
}
View Code

  2.懒汉式单例

技术分享图片
public class LazySingleton {

    //指向自己实例的私有静态引用
    private static  LazySingleton lazySingleton = null;

    //私有的构造方法
    private LazySingleton(){};

    //以自己实例为返回值的静态公有方法
    public static synchronized LazySingleton getInstance(){
        if(lazySingleton == null){
            lazySingleton = new LazySingleton();
        }
        return lazySingleton;
    }
}
View Code

优点:

  1. 在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例。
  2. 避免对资源的多重占用(比如写文件操作)。

注意事项:

  1. 使用时不能用反射模式创建单例,否则会实例化一个新的对象 
  2. 使用懒单例模式时注意线程安全问题 
  3. 饿单例模式和懒单例模式构造方法都是私有的,因而是不能被继承的,有些单例模式可以被继承(如登记式模式) 

总结:

   单例模式作为最常用的设计模式之一,其实现方式除了饿汉式和懒汉式两种方式之外,还有双检锁/双重校验锁机制、登记式/静态内部类和枚举等方式。 饿汉式单例和懒汉式单例由于构造方法是private的,不可被继承。只能使用单例类提供的方法得到单例对象,不要使用反射,否则将会实例化一个新对象。

23种设计模式(1):单例模式

原文:https://www.cnblogs.com/scorpiozone/p/10582361.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!