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

    1.什么是单例模式

      单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一,这种类型的设计模式属于创建型模式。这种模式涉及到一个单一的类该类负责创建自己的对象,同时确保只有单个对象被创建这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象

    • 1、单例类只能有一个实例
    • 2、单例类必须自己创建自己的唯一实例
    • 3、单例类必须给所有其他对象提供这一实例

    2.优缺点

      优点

        在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例

        避免对资源的多重占用(比如写文件操作)

      缺点

        没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化

    3.使用场景

      WEB 中的计数器,不用每次刷新都在数据库里加一次,用单例先缓存起来

      创建的一个对象需要消耗的资源过多,比如 I/O 与数据库的连接

    4.常见单例模式的使用方式

      4.1饿汉式

    public class Singleton {  
        private static Singleton instance = new Singleton();  
        private Singleton (){}  
        public static Singleton getInstance() {  
        return instance;  
        }  
    }

      4.2懒汉式(双检锁/双重校验锁(DCL,即 double-checked locking))

    public class Singleton {  
        private volatile static Singleton singleton;  
        private Singleton (){}  
        public static Singleton getSingleton() {  
        if (singleton == null) {  
            synchronized (Singleton.class) {  
            if (singleton == null) {  
                singleton = new Singleton();  
            }  
            }  
        }  
        return singleton;  
        }  
    }

      4.3静态内部类 

    public class Singleton {  
        private static class SingletonHolder {  
        private static final Singleton INSTANCE = new Singleton();  
        }  
        private Singleton (){}  
        public static final Singleton getInstance() {  
        return SingletonHolder.INSTANCE;  
        }  
    }

      4.4枚举

    public enum Singleton {  
        INSTANCE;  
        public void whateverMethod() {  
        }  
    }
  • 相关阅读:
    SVM的新理解
    特征提取,特征选择
    条件随机场
    分类、检测、识别
    matlab fgetl()
    matlab fopen()
    rar ubuntu
    makefile for opencv
    [洛谷P1231] 教辅的组成
    [洛谷P1514]引水入城
  • 原文地址:https://www.cnblogs.com/helloworldmybokeyuan/p/11693674.html
Copyright © 2011-2022 走看看