黑马程序员技术交流社区

标题: 单例设计模式 [打印本页]

作者: jiahuiting    时间: 2013-9-24 14:45
标题: 单例设计模式
本帖最后由 杨增坤 于 2013-9-24 17:42 编辑

哪位能给我一个单例设计中饿汉式的完整程序。我只知道是用到
1,private  Single()
2,private  static   final   Single=new   Single();
3,public  single getInstance(){return  s;}

作者: xscn    时间: 2013-9-24 14:49
不要为了技术分而水分,你问的这个问题视频里有讲的
  1. public final class Single//饿汉式,Single类一进内存,就已经创建好了对象。
  2. {
  3.      private static Single s = new Single();//在类中创建一个私有并静态的本类对象
  4.      private  Single(){}//私有化构造函数
  5.      public static  Single getInstance()//提供一个方法可以获取到该对象
  6.      {
  7.          return s;
  8.      }
  9. }
复制代码
  1. public final class Single//懒汉式,对象是方法被调用时,才初始化,也叫做对象的延时加载
  2. {
  3.     private static Single s = null;
  4.     private Single(){}
  5.     public static Single getInstance()
  6.     {
  7.         if(s==null)//检查实例是否存在,如果不存在进入下面的synchronized代码块
  8.         {
  9.             synchronized(Single.class)
  10.             {               
  11.                 if(s==null)//拿到锁后再次判断实例是否存在,如果不存在才创建实例
  12.                     s = new Single();
  13.             }
  14.         }
  15.         return s;
  16.     }
  17. }
复制代码

作者: 杨修    时间: 2013-9-24 15:05
单利设计模式只是限制了建立对象的数量为一个,也就是每次使用某一个类的实例都是同一个,楼上已经给出了解决安全问题的代码了,下面给一个暂不考虑安全问题的代码咯。
public final class Single
{
     private String name;
     private int age;
     private static Single s = new Single();

     private  Single(){}//私有化构造函数

     public static  Single getInstance()//提供一个方法可以获取到该对象
     {
         return s;
     }

     public void setAge(int age)
     {
        this.age = age;
     }
     public void setName(String name)
     {
        this.name = name;
     }
     public int getAge()
     {
        return age;
     }
     public String getName()
     {
        return name;
     }
     public void toString()
     {
        return "name"+name+":"+"String"+String;
     }

}
单利设计模式只是限制了产生对象的数量,其他属性和方法已然可以像普通类一样定义。
作者: yting_xmei1129    时间: 2013-9-24 16:34
饿汉式单例模式:HurrySingleton.java

package pattern.singleton;
/**
* -----------------------------------------
* @描述  饿汉式单例
* @作者  fancy
* @邮箱  fancydeepin@yeah.net
* @日期  2012-7-31 <p>
* -----------------------------------------
*/
public class HurrySingleton {

    private static final HurrySingleton INSTANCE = new HurrySingleton();
   
    //私有化构造子,阻止外部直接实例化对象
    private HurrySingleton(){
        
    }
   
    /**
     * <B>方法描述:</B>
     * <p style="margin-left:20px;color:#A52A2A;">
     * 获取类的单例实例
     * @return <span style="color: #008080;"> 返回类的唯一实例 </span>
     */
    public static HurrySingleton getInstance(){
        
        return INSTANCE;
    }
}

希望可以帮到楼主、、、

The you smile until forever 、、、、、、、、、、、、、、、、、、、、、

作者: 咕咕猫    时间: 2013-9-24 17:39
class Single
{
        private Single(){}//私有化构造函数
        private tatic Single s= new Single();//创建本类对象
        public static Single getInstance()//提供访问方式
        {
                return s;//返回给访问者
        }
}
实例:
class Single
{
        private int num;
        public void setnum(int num)
        {
                this.num = num;
        }
        public int getnum()
        {
                return num;
        }
        private Single(){}
        private tatic Single s= new Single();
        public static Single getInstance()
        {
                return s;
        }
}
class SingleDome
{
        public static void main(String[]args)
        {
                Single s1= Single.getInstance();
                Single s2= Single.getInstance();
                s1.stenum(23);
                System.out.println(s2.getnum);//打印结果为23 此时ss,s1,s2都指向同一个对象
        }
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2