天天看小說

第90章

大B:“我就以咖啡外賣店寫幾個java類來描述說明Flyweight設計模式的實現方式吧?!?

客戶買咖啡下訂單,訂單隻區分咖啡口味,如果下了1W個訂單,而咖啡店只賣20種口味的咖啡,那麼我們就沒有必要生成1W個訂單對象,通過享元模式我們只需要生成20個訂單對象。

這個例子舉的不太好,但足以說明問題。下面是具體的代碼。

1、Order.java訂單抽象類

2、FlavorOrder.java訂單實現類

3、FlavorFactory.java訂單生成工廠

4、Client.java客戶類、帶有main方法的測試類

……1、Order.java

packageflyweight;

publicabstractclassOrder{

//執行賣出動作

publicabstractvoidsell();

//獲取咖啡口味

publicabstractStringgetFlavor();

}

……1end

……2、FlavorOrder.java

packageflyweight;

publicclassFlavorOrderextendsOrder{

privateStringflavor;

publicFlavorOrder(Stringflavor){

this.flavor=flavor;

}

publicStringgetFlavor(){

returnthis.flavor;

}

publicvoidsell(){

System.out.println(“賣出一杯[”+flavor+“]?!保?

}

}

……2end

……3、FlavorFactory.java

packageflyweight;

importjava.util.HashMap;

importjava.util.Map;

publicclassFlavorFactory{

//訂單池

privateMap《String,Order》flavorPool=newHashMap《String,Order》(20);

//靜態工廠,負責生成訂單對象

privatestaticFlavorFactoryflavorFactory=newFlavorFactory();

privateFlavorFactory(){}

publicstaticFlavorFactorygetInstance(){

returnflavorFactory;

}

//獲得訂單

publicOrdergetOrder(Stringflavor){

Orderorder=null;

if(flavorPool.containsKey(flavor)){

order=flavorPool.get(flavor);

}else{

//獲得新口味訂單

order=newFlavorOrder(flavor);

//放入對象池

flavorPool.put(flavor,order);

}

returnorder;

}

//獲得已經賣出的咖啡全部口味數量

publicintgetTotalFlavorsMade(){

returnflavorPool.size();

}

}

……3end

……4、Client.java

packageflyweight;

importjava.util.ArrayList;

importjava.util.List;

publicclassClient{

//客戶下的訂單

privatestaticList《Order》orders=newArrayList《Order》(100);

//訂單對象生成工廠

privatestaticFlavorFactoryflavorFactory;

//增加訂單

privatestaticvoidtakeOrders(Stringflavor){

orders.add(flavorFactory.getOrder(flavor));

}

publicstaticvoidmain(String[]args){

//訂單生成工廠

flavorFactory=FlavorFactory.getInstance();

//增加訂單

takeOrders(“摩卡”);

takeOrders(“卡布奇諾”);

takeOrders(“香草星冰樂”);

takeOrders(“香草星冰樂”);

takeOrders(“拿鐵”);

takeOrders(“卡布奇諾”);

takeOrders(“拿鐵”);

takeOrders(“卡布奇諾”);

takeOrders(“摩卡”);

takeOrders(“香草星冰樂”);

takeOrders(“卡布奇諾”);

takeOrders(“摩卡”);

takeOrders(“香草星冰樂”);

takeOrders(“拿鐵”);

takeOrders(“拿鐵”);

//賣咖啡

for(Orderorder:orders){

order.sell();

}

//打印生成的訂單java對象數量

System.out.println(“\n客戶一共買了”+orders.size()+“杯咖啡!”);

//打印生成的訂單java對象數量

System.out.println(“\n共生成了”+flavorFactory.getTotalFlavorsMade()+“個FlavorOrderjava對象!”);

}

}

第189章第115章第143章第25章第195章第13章第138章第46章第79章第38章第43章第123章第21章第148章第6章第112章第5章第22章第205章第194章第71章第176章第125章第39章第75章第87章第212章第208章第39章第2章第162章第63章第183章第189章第11章第192章第156章第60章第218章第63章第18章第90章第37章第132章第155章第185章第58章第181章第113章第126章第20章第212章第98章第47章第28章第31章第127章第38章第145章第169章第129章第65章第124章第18章第147章第216章第27章第170章第152章第97章第49章第149章第19章第171章第48章第46章第54章第220章第220章第184章第16章第39章第119章第121章第171章第160章第7章第217章第77章第31章第132章第205章第175章第191章第191章第207章第131章第35章第76章第205章
第189章第115章第143章第25章第195章第13章第138章第46章第79章第38章第43章第123章第21章第148章第6章第112章第5章第22章第205章第194章第71章第176章第125章第39章第75章第87章第212章第208章第39章第2章第162章第63章第183章第189章第11章第192章第156章第60章第218章第63章第18章第90章第37章第132章第155章第185章第58章第181章第113章第126章第20章第212章第98章第47章第28章第31章第127章第38章第145章第169章第129章第65章第124章第18章第147章第216章第27章第170章第152章第97章第49章第149章第19章第171章第48章第46章第54章第220章第220章第184章第16章第39章第119章第121章第171章第160章第7章第217章第77章第31章第132章第205章第175章第191章第191章第207章第131章第35章第76章第205章
主站蜘蛛池模板: 新巴尔虎左旗| 略阳县| 获嘉县| 通许县| 南康市| 望谟县| 酒泉市| 六盘水市| 灵川县| 渭南市| 临颍县| 德阳市| 虎林市| 红安县| 台东市| 右玉县| 万宁市| 安多县| 海安县| 横峰县| 连云港市| 梓潼县| 永仁县| 东莞市| 乐亭县| 长子县| 罗定市| 沅陵县| 灵武市| 尼木县| 桃源县| 靖远县| 镇原县| 三原县| 吉木乃县| 台中市| 镇康县| 深水埗区| 那坡县| 甘孜县| 高青县|