/**
* 打牌的时候 发牌的总只能唯一吧
* @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]