学习设计模式之单例模式

单例模式(Singleton Pattern)

其定义为:Ensure a class has only one instance , and provide a global point of access to it.

单例模式的通用类图为:

学习设计模式之单例模式

单例模式的优点:

1、由于单例模式在内存中一个实例,减少了内存开支,特别是对一个对象需要频繁的创建、销毁时,而且创建或者销毁时性能又无法优化,单例模式很适用。

2、由于单例模式只生成一个实例,所以减少了系统开销,当一个对象产生需要比较多的资源时,如读取配置,产生其他的依赖对象时,则可以在启动的时候创建一个单例对象来解决。

3、单例模式可以避免对资源的多重占用,因只有一个实例在内存中。

4、单例模式可以在系统中设置全局的访问点,优化和共享资源访问。

单例模式的缺点:

1、单例模式一般没有接口,扩展很困难。

2、单例模式对测试时不利的,在并行开发环境中,如果单例模式还没有完成,是不能进行测试的。

3、单例模式与单一职责原则有冲突。

单例模式的注意事项:

       在高并发情况下,需要注意单例模式的线程同步问题。如下:

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

该段代码会出现多个实例:如一个线程A执行到singleton = new Singleton();单还没有获取对象,第二个线程B也执行到singleton == null,那么线程B也将进入if语句中获得一个实例,,这样在内存中就出现了两个实例。解决这个线程不安全的方法可以在方法前加上关键字synchronized,或者在方法中增加synchronized。


上一篇:Elasticsearch增、删、改、查操作深入详解


下一篇:1、Python与设计模式--单例模式