zoukankan      html  css  js  c++  java
  • 单例设计模式实现的三种方式

    1、饿汉式

    • 私有化构造方法
    • 创建一个对象,这个对象是被 private static final 修饰
    • 向外创建一个静态方法,返回这个实例。
    package singleton;
    /**
    * 单例模式:饿汉式,最为简单的写法同时也是使用最多的
    *
    */
    public class Demo{
        private Demo(){}
    
    
        private static final Demo demo= new Demo();
    
    
        public static Demo getInstance(){
            return demo;
        }
    
    }
    
    

    2、懒汉式(升级版)

    • 私有化构造方法

    • 创建静态内部类

    • 编写向外提供单例的方法(方法中直接返回静态类的私有化成员对象)

    package singleton;
    
    /**
    * 迄今为止最安全的懒加载
    * 线程安全由jvm保证,因为jvm只对类加载一次
    * 其中的静态内部类是当使用getInstance方法的时候才加载
    */
    public class Lanhanshi {
        private Lanhanshi(){
            
        }
        
        private static class LanhanshiHander{
            private static final Lanhanshi lanhanshi = new Lanhanshi();
        }
    
        public static Lanhanshi getInstance() {
            return LanhanshiHander.lanhanshi;
        }
    
        public static void main(String[] args) {
            Lanhanshi instance = Lanhanshi.getInstance();
            Lanhanshi instance2 = Lanhanshi.getInstance();
            System.out.println(instance==instance2);
            new Thread(()-> {
                for (int i = 0; i < 100; i++) {
                    System.out.println(Lanhanshi.getInstance());
                }
                }).start();
        }
    }
    

    3、枚举方法创建单例

    package singleton;
    /**
    * 在effect java中,推荐使用枚举单例,不仅线程安全,还可以防止序列化
    *
    */
    public enum  EnumSingle {
        INSTANCE;
        public void EnumSingle(){}
    
        public static void main(String[] args) {
            for (int i = 0; i < 100; i++) {
                new Thread(()->{
                    System.out.println(EnumSingle.INSTANCE.hashCode());
                }).start();
            }
        }
    }
    

    打印结果
    在这里插入图片描述
    提示:枚举类没有构造方法。

  • 相关阅读:
    原型设计
    简单APP——ToDoList的二次开发(日期规范化+构建搜索栏)
    Java基本语言篇
    C++中各种常用转换汇总学习
    语言篇swift
    洛谷P2384 最短路,积化加
    洛谷P4568 分层图最短路
    【洛谷P1962】矩阵快速幂求Fibonacii数列
    vue-cli教程
    单页应用原理
  • 原文地址:https://www.cnblogs.com/itjiangpo/p/14181441.html
Copyright © 2011-2022 走看看