首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

java设计形式之-单例模式详解

2012-08-26 
java设计模式之---------单例模式详解public class TestSigleTan{ publicstatic void main(String [] args

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  的 对象。这种的方式不能确保创建的资源是否被使用了
如果创建的这个资源没有被使用,就会造成内存资源的浪费。
优点:不会存在并发问题

     

热点排行