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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨静 中级黑马   /  2012-5-15 02:03  /  1942 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

private NumberMachine(){}
        private static NumberMachine instance = new NumberMachine();
        public static NumberMachine getInstance(){
                return instance;
        }
在号码生成器只有一个实例化对象,是因为实际中只有一台取号机才这样设计的吗?另外求解单例模式的设计思路,为什么要设计成上面那样的代码?

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

3 个回复

倒序浏览
本帖最后由 刘克方 于 2012-5-15 08:52 编辑

因为只有一台取号机所以使用了单例模式。
这个问题有点复杂,用到了java 的属性修饰,static关键字的用法;
private 关键字修饰的属性和方法为私有方法,只能在本类内部调用;
上面定义了私有构造方法 private NumberMachine(){}
说明你无法在其他类中通过 new NumberMachine()创建对象;
于是类内部创建了一个对象
private static NumberMachine instance = new NumberMachine();
上面使用了 private关键字和static关键字,接着说一下它们的作用
static关键字说明该对象为类对象,也就是说该类的对象共享该同一个instance对象;
private关键字说明instance对象为私有对象,于是在其他类不能通过NumberMachine.instance得到该对象;
instance对象被创建出来了那么怎么让其他类得到它呢,于是该类提供了如下方法:
public static NumberMachine getInstance(){
                return instance;
        }
再看看这个方法它使用了static关键字,为什么要用static呢,不用行吗,答案:肯定不行;如果没有static关键字
public  NumberMachine getInstance(){
                return instance;
        }
在其他类中调用该法需要 NumberMachine对象;而上面我们说了在其他类中不能new出对象来,这样矛盾就产生了
static关键字的作用是说明该方法为类方法,通过类名可直接调用
class Myclass{
NumberMachine instance=NumberMachine.getInstance()//这样就通过调用其静态方法就可以得到其静态对象了
}

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1 赞一个!

查看全部评分

回复 使用道具 举报
刘克方 发表于 2012-5-15 08:48
因为只有一台取号机所以使用了单例模式。
这个问题有点复杂,用到了java 的属性修饰,static关键字的用法; ...

谢谢,讲的真的太好了!
回复 使用道具 举报
大家一起学习,共同进步
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马