A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 丁朋 于 2012-7-13 22:49 编辑

今天在学习单例设计模式时遇到一个困惑,希望各位黑马能够帮解决下!
为了解决一个类在内存中只存在一个对象,采用的单例设计模式中
public static Single getInstance()
{
  return s;
}
这句话中为什么返回值类型为Single 就是为什么是public static Single,我现在是准备直接记住这样的定义方式,但是
不理解为什么?望解答。
程序如下:(这是毕老师写的,我按照他说的来写的。)
class Single
{
private int num;
public void setNum(int num)
{
  this.num=num;
}
public int getNum()
{
  return num;
}
private Single(){}
private static Single s =new Single();
public static Single getInstance()
{
  return s;
}
}
class  SingleDis
{
public static void main(String[] args)
{
  Single s1=Single.getInstance();
  Single s2=Single.getInstance();
  s1.setNum(24);
  System.out.println(s2.getNum());
}
}

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

6 个回复

正序浏览
单例设计模式:解决一个类在内存只存在一个对象。


想要保证对象唯一。
1,为了避免其他程序过多建立该类对象。先禁止其他程序建立该类对象
2,还为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象。
3,为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。

这三步怎么用代码体现呢?
1,将构造函数私有化。
2,在类中创建一个本类对象。所以返回值当然是你所要创建的对象类型,Single是你定义的类,也是对象所要返回的类型,大白话就是类名是什么,单例模式中,该对象的返回类型就是什么。
3,提供一个方法可以获取到该对象。



对于事物该怎么描述,还怎么描述。
当需要将该事物的对象保证在内存中唯一时,就将以上的三步加上即可。

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

回复 使用道具 举报
因为单例设计模式只有一个对象,并且是你自己创建好的,  内存中就只有一个对象
那么你自己创建了对象就必须提供一个方法给别人用,别人通过这个方法就可以得到你的对象 ,  所以返回值是  Single

既然你这个方法是给别人用的,那么你这个方法就必须是public 的  如果是private的那么别人就用不了
是static的  是因为你这个类不能创建对象, 只能通过类名调用

所以是  public  static

别人就可以直接通过类名调用你这个方法得到想要的对象,并且这个对象是在内存中是惟一的
回复 使用道具 举报
丁朋 发表于 2012-7-13 21:07
没懂,为什么返回值不是void或者其他的,数据类型中好像没有这个Single类型吧。 ...

因为你是要生成一个Signle对象啊,所以返回类型的Signle(
回复 使用道具 举报
帅李 发表于 2012-7-13 21:05
因为单例就是在内存中只生成一个对象,所以就是static,并且由于是要生成这个类的一个对象,所以返回值就是 ...

没懂,为什么返回值不是void或者其他的,数据类型中好像没有这个Single类型吧。
回复 使用道具 举报
单例设计模式:
class Single{
private static final  Single s = new Single();
private Single(){}
public static Single getInstance(){
return s;
}
}
在类的内部创建一个 对象,修饰符 static,最好也加上final 保证唯一性。
构造方法私有化。
肯定还需要对外提供一个访问该对象的方法,所以最后的返回类型必须是Single.

程序中第一次设置num的值后,下次直接调用即可,所以最后打印是24

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

回复 使用道具 举报
因为单例就是在内存中只生成一个对象,所以就是static,并且由于是要生成这个类的一个对象,所以返回值就是本类的一个对象
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马