单例 经典详解



/**
* 打牌的时候 发牌的总只能唯一吧
* @author a528692
*
*/
public class CardManager {
Card card[] = new Card[54];
LinkedBlockingQueue<Card> cardBox = new LinkedBlockingQueue<Card>();

private CardManager(){

}

public static CardManager getInstance(){
System.out.println("static method getInstance");
return CardManagerHolder.instance;
}

/**
* 发牌
* @return
*/
public Card sendCard(){
return cardBox.poll();
}

private final static class CardManagerHolder{//final 的对象是被继承的
private final static CardManager instance = new CardManager();//final 的 属性 是不能被改变值的, 一旦随着静态类生成, 他就在jvm加载类启动的时候,先初始化了

}
}







public class Client {
public static void main(String[] args) {
/*
* 发牌
*/
System.out.println("START");
CardManager cm = CardManager.getInstance();
System.out.println(cm.hashCode());
///CardManager.CardManagerHolder.instance=null;
CardManager cm2 = CardManager.getInstance();
System.out.println(cm2.hashCode());
if(cm == cm2){
System.out.println("same");
}else{
System.out.println("not same");
}


}


}


[quote]

CardManager里面包含了一个CardManagerHolder
把它定义为private static class 内部静态类
那从外部,比如client这个类是无法得到 CardManagerHolder这个类的信息的,如果是public static class 那么这个类型还是能被外面感知的, 如果你不想让外面的类知道你里面的情况,可能用这样的形式 private static class.
此外 , 定义这个里面的 CardManager在CardManagerHolder里设计是private final static , final 表示他的赋值是不能改变的,所有外面客户端拿到这个类就是唯一那个初始化的值new CardManager() , static 表示是类变量,需要被初始化, private 只能被 Outer 引用

[/quote]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值