单例设计模式

SOBER大约 2 分钟

单例设计模式

什么是设计模式

  1. 静态方法和属性的经典使用
  2. 设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格以及解决问题的思考方式 。设计模式就像是经典的棋谱,不同的棋局,我们用不同的棋谱,免去我们自己再思考和摸索

什么是单例设计模式

  1. 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法
  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;
        }
    }
    

饿汉式和懒汉式的区别

  1. 二者最主要的区别在于创建对象的时机不同: 饿汉式是在类加载就创建了对象实例而懒汉式是在使用时才创建。
  2. 饿汉式不存在线程安全问题,懒汉式存在线程安全问题。
  3. 饿汉式存在浪费资源的可能。因为如果程序员一个对象实例都没有使用,那么饿汉式创建的对象就浪费了,懒汉式是使用时才创建,就不存在这个问题。
  4. 在 javaSE 标准类中,java.lang.Runtime就是经典的单例模式