单例设计模式
大约 2 分钟
单例设计模式
什么是设计模式
- 静态方法和属性的经典使用
- 设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格以及解决问题的思考方式 。设计模式就像是经典的棋谱,不同的棋局,我们用不同的棋谱,免去我们自己再思考和摸索
什么是单例设计模式
- 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法
- 单例模式有两种方式:
- 饿汉式
- 懒汉式
单例模式应用实例
演示饿汉式和懒汉式单例模式的实现 步骤如下:
- 1)构造器私有化 防止直接 new
- 2)类的内部创建对象
- 3)向外暴露一个静态的公共方法。
public class HungryHan { public static void main(String[] args) { // HungryHanSun hungryHanSun = new HungryHanSun("小花花"); // HungryHanSun hungryHanSun2 = new HungryHanSun("小花花"); // 通过方法可以获取对象 HungryHanSun instance = HungryHanSun.getInstance(); HungryHanSun instance1 = HungryHanSun.getInstance(); System.out.println(instance); System.out.println(instance1); System.out.println(instance1 == instance); } } class HungryHanSun { private String name; /** * 如何保证只能创建一个 HungryHanSun 对象 * 步骤【单例模式---饿汉式】: * 1.将构造器私有化 * 2.在类的内部直接创建 * 3.提供一个公共的 static 方法 返回 hungryHanSun 对象 * */ // 为了能够在静态方法中,返回 hungryHanSun 对象,需要将其修饰为 static // 不管是否使用,new HungryHanSun() 都会随着类的加载而创建 显得特别着急,就叫饿汉式 // 使用对象:通常是重量级的对象,饿汉式可能造成资源浪费,因为不管是否使用都会加载 private static HungryHanSun hungryHanSun = new HungryHanSun("小花花"); public HungryHanSun(String name) { this.name = name; } public static HungryHanSun getInstance(){ return hungryHanSun; } }
饿汉式和懒汉式的区别
- 二者最主要的区别在于创建对象的时机不同: 饿汉式是在类加载就创建了对象实例而懒汉式是在使用时才创建。
- 饿汉式不存在线程安全问题,懒汉式存在线程安全问题。
- 饿汉式存在浪费资源的可能。因为如果程序员一个对象实例都没有使用,那么饿汉式创建的对象就浪费了,懒汉式是使用时才创建,就不存在这个问题。
- 在 javaSE 标准类中,java.lang.Runtime就是经典的单例模式