设计模式二 单例模式

Posted idea-persistence

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式二 单例模式相关的知识,希望对你有一定的参考价值。

0、基本定义

  单例模式,保证一个类仅有一个实例,并提供一个访问它但全局访问点.

通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象。一个最好的办法,让类自身负责保存它的唯一实例。

这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法。

要求:

1、构造私有方法

2、定义一个实例,自己实例化

3、获取实例

 

spring 中默认bean加载都是单例。

1、实现方式

1.1、饿汉式

public class Emperor {

    private static final Emperor emperor = new Emperor();
    private Emperor() {

    }

    public static Emperor getInstance() {
        return emperor;
    }

    public void say() {
        System.out.println("I am Empror..A. " + this);
    }
}

  

1.2、懒汉式


public class Singleton {

private static Singleton singleton = null;

private Singleton() {}

//线程不安全
public static Singleton getSingleton() {
if (singleton == null) {
singleton = new Singleton();
}
return singleton ;
}
}

 

2、优缺点

2.1 、优点:

》减少了内存开支,

》减少了系统的性能开销,当一个对象需要较多资源时,则可以启动时直接产生。 spring IOC

 

2.2、缺点

》 单例模式一般没有接口,扩展困难

》单例模式对测试不利。在并行环境中,如果单例没有完成,是不能进行测试的,没有接口也不能mock的方式虚拟一个对象。??why

》与单一职责有冲突。

2.3 使用场景

》项目中需要一个共享数据或共享访问点,如web页面中计数器

》 创建一个对象需要消耗的资源过多,如 访问IO和数据库等资源

》工具类

 

参考资料:

《设计模式之蝉》

《大话设计模式》














以上是关于设计模式二 单例模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式二单例模式

如何写一个简单的单例模式?

设计模式之单例设计模式

设计模式-单例模式

创建型模式之单例模式

C++特殊类设计(单例模式)