永发信息网

如何破坏JAVA中的单例模式

答案:2  悬赏:50  手机版
解决时间 2021-03-22 21:17
如何破坏JAVA中的单例模式
最佳答案
单利模式大抵有两种方法:
一种是通过private 构造函数 实现的单利,这个如果写法没有问题的话,应该是不能被破坏的。
比如:
private 构造函数()

some code goes here;


private static 类 instance = null;
public static 类 getInstance()
{
if (null == instance)//<-- 这种写法在并发情况下 是可以被破坏的,如果之前有并发控制的话就没有办法破坏。

instance = new 类();

return instance;
}
第二种是借助其它的东西实现的单利
public 类/接口 getSomeInstance(String classFlg)

if (map.get(classFlg) != null)//<-- 借助Map 实现了对类实例的控制,毫无悬念如果类的封装不好就可以破坏,因为 我可以直接通过 new 来实例化 这个类,如果是接口的话就没有办法了。

return map.get(classFlg)

全部回答
多线程可以破坏单例模式追答/*
* 这个Java程序用于测试单例模式,并测试多线程下对单例模式的破坏
* 该程序写了单线程和多线程两种
* 为了后期测试理解单例模式,将14-20行多线程部分备注了,测试多线程时,请将11-12行备注,否则无法体现多线程对单例模式的破坏
* 多线程同步能够有效阻止多线程对单例模式的破坏,程序中31行将同步修饰符备注掉,测试阻止多线程对单例模式的破坏时,可以去除备注
*/

public class DanliDemo {
public static void main(String []args) {
//此处如果打印两次DanLi类构造方法中的语句,证明实例化对象不止一个,单例模式被破坏,否则单例模式成功。
DanLi.getDanLi();//调用DanLi的静态方法,获取对象,
DanLi.getDanLi();//再次调用静态方法,试图获取对象

/* //构造多线程去破坏单例模式
PoHuai p=new PoHuai();
Thread t1=new Thread(p);//线程1
Thread t2=new Thread(p);//线程2
t1.start();//线程1启动
t2.start();//线程2启动
*/ }
}

class DanLi{//创建一个类,该类用于充当单例类
private static DanLi danLi;//声明私有的单例类对象

private DanLi() {//利用构造方法私有的方式,使得这个类无法通过构造方法构造对象
System.out.println("单例模式的私有构造方法,这句话打印超过1次,即本单例模式被破坏(有多于1个的实例化对象。)");
}

public static /*synchronized*/ DanLi getDanLi() {//提供一个公开的静态方法,利用该方法调用私有构造方法以便构造对象
if(danLi==null) {//判断静态的DanLi类对象是否为空
return danLi=new DanLi();//DanLi类对象为空即该类未被实例化,因此调用构造方法进行构造并将对象返回,以便被外部获取使用
}else {//如果不为空
return danLi;//直接返回该对象,如此能够保证该DanLi类有且只有一个实例化对象
}
}
}

//创建一个线程类,利用该类构造两个线程,试图破坏单例模式
class PoHuai implements Runnable{
public void run() {
DanLi.getDanLi();//调用单例类的静态方法,企图获取单例类对象
}

}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
有没有 跟在驾校学车 一样的单价游戏,
乌鲁木齐市公安局公共交通治安分局在哪里啊,
求分析 中国为什么不接受叙利亚难民
婚前怀孕怎么办
下列属于传染病的是A.冠心病B.高血压C.胃癌D.
嗯嗯上火了吃什么稀饭好
有一部国产动漫 一开始就是孙悟空烤哮天犬 里
电厂的仪用空气罐是干啥用的,杂用空气罐呢?
快快快 初三英语作文 I Will Never Forget___
100万存一年定期 利息有多少
东风本田2017款思域暖风怎么开
儿童蠕虫入侵是怎么回事
为什么我化妆只会显老
生在几月份口福好,一生不愁吃穿更不愁没钱花
外省摩托车到肇庆行驶会罚款吗 不进端州区
推荐资讯
自制的阿胶糕上传淘宝是选什么类目
51苹果助手iPhone版好不好
我想染发 可是 不知道染什么颜色好 在办公室
有谁知道赵群学赵神仙现在在哪?怎么能联系到
活田鸡能不能带上火车
汽车在行驶途中,为了安全,车与车之间必须保
(1)由生铁粉、铜粉组成的混合物与适量的稀
某海域两艘油船之间的距离为8100千米,量得地
已知y1=2x-5,y2=-2x+3,如果y1<y2,则x的取
His father was really a person. Once he m
单选题某种生物在分解有机物的过程中不需要氧
天天向上20130315中的欧弟和李小冉玩的两款手
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?