男男做受网站,湖北企业网站建设公司,网页设计基础怎么制作水平导航条,大庆建设集团网站单例模式#xff08;Singleton Pattern#xff09;是一个比较简单的模式#xff0c;它确保某一个类只有一个实例#xff0c;而且自行实例化并向整个系统提供这个实例。今天我们就来学习一下单例模式的用法。有生之年#xff0c;一起去看看这个美丽易碎的世界。凡有等待Singleton Pattern是一个比较简单的模式它确保某一个类只有一个实例而且自行实例化并向整个系统提供这个实例。今天我们就来学习一下单例模式的用法。有生之年一起去看看这个美丽易碎的世界。凡有等待就有启程。 单例模式 一、单例模式的通用代码 通过使用private的构造函数确保了在一个应用中只产生一个实例并且是自行实例化的在Singleton中自己使用new Singleton()单例模式的通用源代码如下: package com.linux.huhx.learn.clone;/*** Author: huhx* Date: 2017-12-26 上午 11:27*/
public class Singleton {private static final Singleton singleton new Singleton();//限制产生多个对象private Singleton() {}//通过该方法获得实例对象public static Singleton getSingleton() {return singleton;}
} 二、单例模式的优点 由于单例模式在内存中只有一个实例减少了内存开支特别是一个对象需要频繁地创建、销毁时而且创建或销毁时性能又无法优化单例模式的优势就非常明显。由于单例模式只生成一个实例所以减少了系统的性能开销当一个对象的产生需要比较多的资源时如读取配置、产生其他依赖对象时则可以通过在应用启动时直接产生一个单例对象然后用永久驻留内存的方式来解决在Java EE中采用单例模式时需要注意JVM垃圾回收机制。单例模式可以避免对资源的多重占用例如一个写文件动作由于只有一个实例存在内存中避免对同一个资源文件的同时写操作。单例模式可以在系统设置全局的访问点优化和共享资源访问例如可以设计一个单例类负责所有数据表的映射处理。 三、单例模式的缺点 单例模式一般没有接口扩展很困难若要扩展除了修改代码基本上没有第二种途径可以实现。单例模式为什么不能增加接口呢因为接口对单例模式是没有任何意义的它要求“自行实例化”并且提供单一实例、接口或抽象类是不可能被实例化的。当然在特殊情况下单例模式可以实现接口、被继承等需要在系统开发中根据环境判断。单例模式对测试是不利的。在并行开发环境中如果单例模式没有完成是不能进行测试的没有接口也不能使用mock的方式虚拟一个对象。单例模式与单一职责原则有冲突。一个类应该只实现一个逻辑而不关心它是否是单例的是不是要单例取决于环境单例模式把“要单例”和业务逻辑融合在一个类中。 四、单例模式的使用场景 在一个系统中要求一个类有且仅有一个对象如果出现多个对象就会出现“不良反应”可以采用单例模式具体的场景如下 要求生成唯一序列号的环境在整个项目中需要一个共享访问点或共享数据例如一个Web页面上的计数器可以不用把每次刷新都记录到数据库中使用单例模式保持计数器的值并确保是线程安全的创建一个对象需要消耗的资源过多如要访问IO和数据库等资源需要定义大量的静态常量和静态方法如工具类的环境可以采用单例模式当然也可以直接声明为static的方式。 五、单例模式的注意事项 首先在高并发情况下请注意单例模式的线程同步问题。这个具体的解决方法我们在另外一篇博客中有讲到过可以参考:java高级----Thread之单例模式的使用。 其次需要考虑对象的复制情况。在Java中对象默认是不可以被复制的若实现了Cloneable接口并实现了clone方法则可以直接通过对象复制方式创建一个新对象对象复制是不用调用类的构造函数因此即使是私有的构造函数对象仍然可以被复制。在一般情况下类复制的情况不需要考虑很少会出现一个单例类会主动要求被复制的情况解决该问题的最好方法就是单例类不要实现Cloneable接口。 友情链接 转载于:https://www.cnblogs.com/huhx/articles/patterndesignjavasinglon.html