天天看小說

第54章

大B:“你知不知道單體模式有哪些不同表現(xiàn)形式?”

小A:“我知道。不同表現(xiàn)形式:1、餓漢式單體類:類被加載的時候?qū)⒆约撼跏蓟8影踩?、懶漢式單體類:在第一次被引用的時候?qū)⒆约撼跏蓟L岣吡诵省?、多例類(多例模式):除了可以提供多個實例,其他和單體類沒有區(qū)別。”

大B:“不錯,我再詳細說給你聽吧!”

單體模式的不同表現(xiàn)形式之:多例類(多例模式)

所謂多例(MultitonPattern)實際上就是單例模式的自然推廣。作爲對象的創(chuàng)建模式,多例模式或多例類有以下的特點:

1、多例類可以有多個實例

2、多例類必須自己創(chuàng)建,管理自己的實例,並向外界提供自己的實例。這種允許有限個或無限個實例,並向整個JVM提供自己實例的類叫做多例類,這種模式叫做多例模式。

(1)有上限多例模式。有上限的多例類已經(jīng)把實例的上限當作邏輯的一部分,並建造到了多例類的內(nèi)部,這種多例模式叫做有上限多例模式。

importjava.util.Random;

importjava.util.Date;

publicclassDie

{

privatestaticDiedie1=newDie();

privatestaticDiedie2=newDie();

/**

*私有的構(gòu)造函數(shù)保證外界無法直接將此類實例化

*

*/

privateDie()

{

}

/**

*工廠方法

*/

publicstaticDiegetInstance(intwhichOne)

{

if(whichOne……1)

{

returndie1;

}else{

returndie2;

}

}

/**

*投骰子,返回一個在1~6之間的隨機數(shù)

*/

publicsynchronizedintdice()

{

Dated=newDate();

Randomr=newRandom(d.getTime());

intvalue=r.nextInt();//獲取隨機數(shù)

value=Math.abs(value);//獲取隨機數(shù)的絕對值

value=value%6;//對6取模

value+=1;//由於value的範圍是0~5,所以value+1成爲1~6

returnvalue;

}

}

/**

*測試的客戶端,投擲骰子

*/

publicclassDieClient

{

privatestaticDiedie1,die2;

publicstaticvoidmain(String[]args)

{

die1=Die.getInstance(1);

die2=Die.getInstance(2);

System.out.println(die1.dice());

System.out.println(die2.dice());

}

}

importjava.util.Random;

importjava.util.Date;

publicclassDie

{

privatestaticDiedie1=newDie();

privatestaticDiedie2=newDie();

/**

*私有的構(gòu)造函數(shù)保證外界無法直接將此類實例化

*

*/

privateDie()

{

}

/**

*工廠方法

*/

publicstaticDiegetInstance(intwhichOne)

{

if(whichOne……1)

{

returndie1;

}else{

returndie2;

}

}

/**

*投骰子,返回一個在1~6之間的隨機數(shù)

*/

publicsynchronizedintdice()

{

Dated=newDate();

Randomr=newRandom(d.getTime());

intvalue=r.nextInt();//獲取隨機數(shù)

value=Math.abs(value);//獲取隨機數(shù)的絕對值

value=value%6;//對6取模

value+=1;//由於value的範圍是0~5,所以value+1成爲1~6

returnvalue;

}

}

/**

*測試的客戶端,投擲骰子

*/

publicclassDieClient

{

privatestaticDiedie1,die2;

publicstaticvoidmain(String[]args)

{

die1=Die.getInstance(1);

die2=Die.getInstance(2);

System.out.println(die1.dice());

System.out.println(die2.dice());

}

}

(2)無上限多例模式。例數(shù)目沒有上限的多例模式叫無上限多例模式。

注意:由於沒有上限的多例類對實例的數(shù)目是沒有限制的,因此,雖然這種多例模式是單例模式的推廣,但是這種多例類並不一定能夠回到單例類。於是先不知道要創(chuàng)建多少個實例,因此,必然使用聚集管理所有的實例。

例子:購物車

importjava.util.ArrayList;

importjava.util.HashMap;

publicclassShoppingCart{

privateShoppingCartshoppingCart=null;

//使觓shMap聚集管理所有的實例;

privatestaticHashMap《String,ShoppingCart》instanse=newHashMap《String,ShoppingCart》();

//訂單列表

privateArrayList《ItemOrder》orderedItems=null;

//更新器

privateintreadCount=0;

/**

*同單例類一樣,私有的構(gòu)造函數(shù)保證外界無法直接將此類實例化

*

*/

privateShoppingCart(){

orderedItems=newArrayList《ItemOrder》();

}

/*

*獲取購物車,一個用戶只能有一個購物車。有多少用戶就有多少購物車。

**/

publicsynchronizedstaticShoppingCartgetInstance(Stringuser){

ShoppingCartshoppingCart=instanse.get(user);

if(shoppingCart……null){

shoppingCart=newShoppingCart();

instanse.put(user,shoppingCart);

}

returnshoppingCart;

}

/*

*用戶退出登陸的時候,通過外部調(diào)用將購物車移除。

**/

publicsynchronizedvoidremoveShoppingCart(Stringkey){

instanse.remove(key);

}

/*

*獲取購物車中訂單列表(orderedItems)

**/

publicArrayList《ItemOrder》getOrderedItems(){

readIn();

readOut();

returnorderedItems;

}

/*

*管理訂單。

*如果是舊訂單則更新其數(shù)量。

*如果是新訂單則添加到訂單列表中。

**/

publicvoidaddItem(StringitemId){

updateIn();

ItemOrderorder;

for(inti=0;i

第222章第125章第202章第62章第12章第221章第25章第129章第148章第172章第187章第224章第225章第26章第220章第8章第213章第139章第96章第35章第13章第188章第145章第154章第101章第150章第225章第28章第87章第209章第33章第155章第70章第136章第54章第32章第70章第80章第84章第215章第137章第64章第7章第159章第178章第209章第125章第25章第222章第208章第141章第180章第91章第137章第72章第10章第3章第42章第143章第98章第10章第216章第107章第99章第125章第128章第104章第77章第89章第55章第160章第209章第76章第164章第198章第155章第220章第6章第52章第6章第109章第50章第4章第112章第85章第108章第108章第33章第127章第225章第116章第12章第154章第67章第105章第228章第140章第44章第34章第114章
第222章第125章第202章第62章第12章第221章第25章第129章第148章第172章第187章第224章第225章第26章第220章第8章第213章第139章第96章第35章第13章第188章第145章第154章第101章第150章第225章第28章第87章第209章第33章第155章第70章第136章第54章第32章第70章第80章第84章第215章第137章第64章第7章第159章第178章第209章第125章第25章第222章第208章第141章第180章第91章第137章第72章第10章第3章第42章第143章第98章第10章第216章第107章第99章第125章第128章第104章第77章第89章第55章第160章第209章第76章第164章第198章第155章第220章第6章第52章第6章第109章第50章第4章第112章第85章第108章第108章第33章第127章第225章第116章第12章第154章第67章第105章第228章第140章第44章第34章第114章
主站蜘蛛池模板: 青川县| 黄梅县| 静乐县| 林芝县| 凤庆县| 连平县| 大田县| 武陟县| 长丰县| 策勒县| 公安县| 翼城县| 商都县| 荆门市| 南郑县| 巴塘县| 安岳县| 清镇市| 盐山县| 张家川| 通山县| 万州区| 淮阳县| 多伦县| 八宿县| 沙湾县| 龙州县| 许昌县| 静海县| 潜江市| 乌兰察布市| 弋阳县| 泰来县| 巴南区| 镇江市| 巫山县| 黔西县| 北流市| 乐亭县| 红桥区| 禹州市|