23种设计模式(1):单例模式
程序员文章站
2022-05-14 09:06:25
定义: 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要 ......
定义:
单例模式(singleton pattern)是 java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
结构:
- 指向自身的静态实例的私有静态引用
- 私有构造函数
- 返回自身实例的公有构造函数
类图:
实现:
1.饿汉式单例
public class eagersingleton { //指向自己实例的私有静态引用 private static eagersingleton eagersingleton = new eagersingleton(); //私有的构造方法 private eagersingleton(){}; //以自己实例为返回值的静态公有方法 public static eagersingleton getinstance(){ return eagersingleton; } }
2.懒汉式单例
public class lazysingleton { //指向自己实例的私有静态引用 private static lazysingleton lazysingleton = null; //私有的构造方法 private lazysingleton(){}; //以自己实例为返回值的静态公有方法 public static synchronized lazysingleton getinstance(){ if(lazysingleton == null){ lazysingleton = new lazysingleton(); } return lazysingleton; } }
优点:
- 在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例。
- 避免对资源的多重占用(比如写文件操作)。
注意事项:
- 使用时不能用反射模式创建单例,否则会实例化一个新的对象
- 使用懒单例模式时注意线程安全问题
- 饿单例模式和懒单例模式构造方法都是私有的,因而是不能被继承的,有些单例模式可以被继承(如登记式模式)
总结:
单例模式作为最常用的设计模式之一,其实现方式除了饿汉式和懒汉式两种方式之外,还有双检锁/双重校验锁机制、登记式/静态内部类和枚举等方式。 饿汉式单例和懒汉式单例由于构造方法是private的,不可被继承。只能使用单例类提供的方法得到单例对象,不要使用反射,否则将会实例化一个新对象。
上一篇: 细说被百度降权的解决方法