欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-05-14 09:06:25
定义: 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要 ......

定义

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

结构:

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

类图:

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

实现:

  1.饿汉式单例

23种设计模式(1):单例模式
public class eagersingleton {

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

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

    //以自己实例为返回值的静态公有方法
    public static  eagersingleton getinstance(){
        return  eagersingleton;
    }
}
view code

  2.懒汉式单例

23种设计模式(1):单例模式
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的,不可被继承。只能使用单例类提供的方法得到单例对象,不要使用反射,否则将会实例化一个新对象。