单例模式
单例模式:一个类只可以有一个产生一个对象。
实现:把构造函数设置为private就可以禁止外部创建对象了。
定义:
确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
优缺点:
优点:1·因为单例模式 在内存中只有一个实例,所以减少了内存的开支,特别是一个对象需要频繁的创建、销毁时、并且创建和销毁时性能又无法优化,这时单例模式的优点就很明显。
2·单例模式只生成一个实例,减少了系统的性能开销,当一个对象需要比较多的资源的时候,可以在应用启动时,直接产生一个单例对象,永久的驻存在内存中。(javaEE需要注意单例模式的垃圾回收)
3·单例模式可以避免对资源的重复占用。
4·单例模式可以设置全局的访问点。
缺点:1·单例模式一般没有借口,因此扩展很困难、。
2·单例模式对测试不利。在并行开发中,如果单例没有完成,其他的活动也不能进行,因为没有借口,所以mock也无法虚拟一个对象。
3.单例模式与单一职责原则冲突。
单例模式的应用场景:
1、要求生成唯一的序列号。
2、在整个项目中需要一个共享访问点或者共享数据
3、创建一个对象需要消耗过多的资源,比如IO和数据库资源
4、需要定义大量的静态常量和静态方法。
注意:单例模式需要注意线程同步的问题,当高并发时,会有线程不安全的情况;解决办法是可以使用synchronized。
对于单例模式的实现一般有两种办法:饿汉式和 懒汉式
饿汉式:指的是一上来就创建一个实例,等不及了。
public class singleton {
private static final singleton singleton=new songleton();
private singleton(){}
public staic singleton getinstance(){
return singleton;
}
}
懒汉式:先不急着创建对象,什么时候需要了再说
public class singleton {
private static final singleton singleton=null;
private singleton(){}
public staic singleton getinstance(){
synchronized{
if(singleton==null)
{ singleton =new singleton();}
}
return singleton;
}
}
单例模式的扩展:上限的单例模式 :产生固定数量的对象的模式
|
|