网上关于单例模式的讲解铺天盖地,而这个设计模式在开发中用的频率也比较频繁,所以说说这个。
单例模式,顾名思义,通过这个模式构建出的对象在整个项目的运行中有并且只有只一个,且对象不变。具体怎么做呢
public class Appcontext {
//在创建最初就new一次,仅仅一次
private static final Appcontext appcontext = new Appcontext();
//私有方法,不让外部去访问
private Appcontext() {
}
//通过这个方法去返回给调用者唯一对象
public static Appcontext getAppcontext() {
return appcontext;
}
}
这种写法被称之为饿汉模式,既然有饿汉模式就有懒汉模式
public class Appcontext {
//在创建最初就new一次,仅仅一次
private static Appcontext appcontext = new Appcontext();
//私有方法,不让外部去访问
private Appcontext() {
}
//通过这个方法去返回给调用者唯一对象
public static Appcontext getAppcontext() {
if (appcontext == null) {
appcontext = new Appcontext();
}
return appcontext;
}
}
这就是饿汉模式,但是缺有线程不安全的情况发生,比如线程A运行到了
appcontext = new Appcontext();
刚刚进入,但是还没有new
线程B执行到了
if (appcontext == null) {
此时appcontext确实是==null的,然后2秒(随便说的2秒)过后,你的项目就存在了2个对象。刺激吧=w=
所以我这里还是推荐第一种写法。
单例模式是用的最广泛而且最简单的一种单例模式了,使用的时候注意一下,如果你用单例模式构建一个对象去存储一个东西,那么这个对象是不会销毁的,除非你手动释放资源。不然可能会发生内存泄露的事情。!!!!要注意!!!
网友评论