zoukankan      html  css  js  c++  java
  • 设计模式之单例模式

    1、什么是单例模式?
    单例模式就是一个类只会有一个实例。
    2、单例模式实现方式
    2.1 懒汉模式
    /**
    * 保证该类只会生成一个类实例
    */
    public class LayzSinglePattern {
    private static LayzSinglePattern instance ;
     
    /**
    * 静态内部类,静态内部类是第一次被使用的时候加载的
    */
    private static class LayzHolder {
    private static final LayzSinglePattern INSTANCE = new LayzSinglePattern();
    }
     
    private LayzSinglePattern(){
    //do something
    }
     
    /**
    * 线程不安全的
    * @return
    */
    public static LayzSinglePattern getInstance() {
    if (null == instance) {
    instance = new LayzSinglePattern();
    }
    return instance;
    }
     
    /**
    * 线程安全的
    * @return
    */
    public static synchronized LayzSinglePattern getInatanceSecurity() {
    if (null == instance) {
    instance = new LayzSinglePattern();
    }
    return instance;
    }
     
    /**
    * 双重锁保证线程安全
    * @return
    */
    public static LayzSinglePattern getInstanceDoubbleLock() {
    if (null == instance) {
    synchronized(LayzSinglePattern.class) {
    if (null == instance){
    instance = new LayzSinglePattern();
    }
    }
    }
     
    return instance;
    }
     
    /**
    * 静态内部类保证线程安全
    * @return
    */
    public static LayzSinglePattern getInstanceInnerClass() {
    return LayzHolder.INSTANCE;
    }
     
    }
     
    2.2 饿汉模式
    /**
    * 饿汉模式采用关键字final修饰,final天生是线程安全的
    */
    public class HungrySinglePattern {
     
    private static final HungrySinglePattern instance = new HungrySinglePattern();
     
    public static HungrySinglePattern getInstance() {
    return instance;
    }
    }
     
     注意:JAVA反射会使单例模式失效
     
     
     
  • 相关阅读:
    服务端获取实际IP工具类
    vue-element-admin整合服务端代理api
    elemengui分页
    vue获取浏览器地址栏参数
    el-table-column动态判断显示性别男女
    nginx代理静态页面添加二级目录
    nginx配置代理指向Redis
    SpringBoot整合Redis日志反复提示Redis重连问题
    centos7安装Redis
    nohup启动jar包
  • 原文地址:https://www.cnblogs.com/tspeking/p/tspeking.html
Copyright © 2011-2022 走看看