码迷,mamicode.com
首页 > 其他好文 > 详细

单例模式

时间:2019-04-19 00:41:12      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:逻辑   加锁   one   过多   决定   简单的   code   vat   span   

单例模式(Singleton Pattern)

是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

我们可以通过这种方式直接访问,不需要实例化该类的对象。什么时候创建自己的对象是自己决定。

什么时候创建分为两种。懒汉式和饿汉式。


package com.shiro.springbootshiro.Singleton;

/**
* 作用:饿汉式
* 类加载时就初始化,浪费内存。
* 是否多线程安全:是安全的。不用加锁。执行效率会高。
* 是否lazy初始化:否
* 第一次类创建的同时就实例化一个静态对象。以后不管使用不使用,都会占内存。
* 在第一次调用的时候速度也会比较快,因为资源已经被加载。
*/
public class SingletonEH {
private static SingletonEH instance=new SingletonEH();
// 为什么是私有的。 限制产生多个对象
private SingletonEH(){}

public static SingletonEH getInstance() {
return instance;
}
}

package com.shiro.springbootshiro.Singleton;

/**
 * 作用:懒汉式
 *  是否多线程安全:否。要确定线程安全,要加上锁。
 *  是否lazy初始化:是
 *  会延迟加载,如果没有使用到,就一直不创建。第一次调用的时候才会初始化。性能上会有些延迟。
 */
public class SingletonLH {
    private static SingletonLH instance;
    private SingletonLH(){}

    public static synchronized SingletonLH getInstance() {
        if (instance == null) {
            instance = new SingletonLH();
        }
        return instance;
    }
}

应用实例: 1、一个党只能有一个主席。 2、Windows 是多进程多线程的,在操作一个文件的时候,就不可避免地出现多个进程或线程同时操作一个文件的现象,所以所有文件的处理必须通过唯一的实例来进行。 3、一些设备管理器常常设计为单例模式,比如一个电脑有两台打印机,在输出的时候就要处理不能两台打印机打印同一个文件。

优点: 1、在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例(比如管理学院首页页面缓存)。 2、避免对资源的多重占用(比如写文件操作)。

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

使用场景: 1、要求生产唯一序列号。 2、WEB 中的计数器,不用每次刷新都在数据库里加一次,用单例先缓存起来。 3、创建的一个对象需要消耗的资源过多,比如 I/O 与数据库的连接等。

单例模式

标签:逻辑   加锁   one   过多   决定   简单的   code   vat   span   

原文地址:https://www.cnblogs.com/bulrush/p/10733293.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!