java设计模式之---------单例模式详解
public class TestSigleTan{
public static void main(String [] args){
/**
for(int i = 0; i <10 ;i ++){
SigleTan singe = SigleTan.newInstance();
System.out.println(singe);
}
*/
for(int i = 0; i <10 ;i++){
SigleTan2 sig = SigleTan2.newIstance();
System.out.println(sig);
}
}
}
class SigleTan{
public static SigleTan sigletan ;
private SigleTan(){
}
public static SigleTan newInstance(){
if(sigletan==null){
sigletan = new SigleTan();
return sigletan;
}
return sigletan;
}
}
class SigleTan2{
public static SigleTan2 sigletan = new SigleTan2();
private SigleTan2(){
}
public static SigleTan2 newIstance(){
return sigletan;
}
}
单例模式第一种的写法:
class SigleTan{
public static SigleTan sigletan ;
private SigleTan(){
}
public static SigleTan newInstance(){
if(sigletan==null){
sigletan = new SigleTan();
return sigletan;
}
return sigletan;
}
}
个人的见解:
java单例模式的第一种写法:
在这一种的写法之中,我们需要把构造的方法私有化,不准外界通过new
方式来 创建一个对象,而是通过在此类中的静态方法来创建一个对象,
缺点:------在newInstance()中通过if()判断的条件来确定的是否来创建一个对象
这用方式不能保证CUP 每次分配给newInstance()执行的时间片都能一次
足够,如果在if(sigletan==null)判断之后,时间片执行完毕,有多个线程
正好也来访问SigleTan 类,也正好来访问到if(sigletan==null)之后或者是sigletan= new SigleTan()
之后,无法判断是否为空了,就会在单例 的时候出现错误,
那么就会在内存之中生成多个对象,从而不能实现单例的模式
优点:-------节省资源
单例模式第二种的写法:
class SigleTan2{
public static SigleTan2 sigletan = new SigleTan2();
private SigleTan2(){
}
public static SigleTan2 newIstance(){
return sigletan;
}
}
个人见解:
java单例模式的第二种写法:
在这一种写法之中,我们仍然要把构造的方法私有化,不准许外界通过new
的方式来创建一个对象,而是通过在此类的静态的方法来创建一个对象
缺点:---------
该种方法上来就创建一个静态的SigleTan2对象, 然后在同过newIstance()的方法
来返回这个创建的static 的 对象。这种的方式不能确保创建的资源是否被使用了
如果创建的这个资源没有被使用,就会造成内存资源的浪费。
优点:不会存在并发问题