天天看小說

第150章

小A:“通常我們會遇到這樣的一個問題:我們知道一個算法所需的關鍵步聚,並確定了這些步聚的執(zhí)行順序。但是某些步聚的具體實現(xiàn)是未知的,或者是某些步聚的實現(xiàn)與具體的環(huán)境相關。”

大B:“模板方法模式把我們不知道具體實現(xiàn)的步驟封裝成抽象方法,提供一些按正確順序調用它們的具體方法(這些具體方法統(tǒng)稱爲模板方法),這樣構成一個抽象基類。子類通過繼承這個抽象基類去實現(xiàn)各個步聚的抽象方法,而工作流程卻由父類來控制。”

小A:“什麼是模板方法模式?”

大B:“定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。TemplateMethod使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。”

小A:“要如何去實現(xiàn)它哩?”

大B:“模板模式,是衆(zhòng)多模式之中用得比較多的模式,在具體的應用中,我們已經(jīng)經(jīng)意或者不經(jīng)意的採用了這種模式。其是先寫定義,後實現(xiàn),然後再調用,將實現(xiàn)與調用分開,從而利用增強了程序的延展性。模板模式是利用了虛函數(shù)的多態(tài)性,我們可以實現(xiàn),也可以不實現(xiàn)。”

publicabstractclassAbstractOrder{

publicOrderplaceOrder(intcustomerId,ListorderItemList){

inttotal=0;

for(inti=0;igetSpendingLimit(customerId)){

thrownewBusinessException(“超出信用額度”+getSpendingLimit(customerId));

}

intorderId=saveOrder(customerId,total,orderItemList);

returnnewOrderImpl(orderId,total);

}

publicabstractintgetOrderItemPrice(OrderItemorderItem);

publicabstractintgetSpendingLimit(intcustomerId);

publicabstractintsaveOrder(intcustomerId,inttotal,ListorderItemList);

}

rendercode();

AbstractOrder在placeOrder方法中確定了定單處理的邏輯,placeOrder方法也稱爲模板方法。在placeOrder中調用了三個抽象方法。子類只需要去實現(xiàn)三個抽象方法,而無需要去關心定單處理的邏輯。

第9章第7章第21章第61章第195章第84章第74章第109章第70章第222章第91章第158章第140章第115章第95章第153章第186章第208章第43章第157章第18章第145章第42章第200章第14章第183章第224章第20章第213章第44章第2章第195章第156章第75章第59章第42章第10章第198章第154章第108章第61章第151章第53章第95章第11章第213章第1章第118章第169章第78章第31章第19章第30章第180章第1章第159章第93章第12章第200章第52章第139章第125章第8章第9章第30章第180章第69章第181章第196章第63章第7章第217章第156章第45章第190章第44章第155章第43章第126章第124章第178章第92章第27章第189章第151章第185章第223章第19章第4章第48章第57章第219章第6章第25章第86章第203章第161章第106章第4章
第9章第7章第21章第61章第195章第84章第74章第109章第70章第222章第91章第158章第140章第115章第95章第153章第186章第208章第43章第157章第18章第145章第42章第200章第14章第183章第224章第20章第213章第44章第2章第195章第156章第75章第59章第42章第10章第198章第154章第108章第61章第151章第53章第95章第11章第213章第1章第118章第169章第78章第31章第19章第30章第180章第1章第159章第93章第12章第200章第52章第139章第125章第8章第9章第30章第180章第69章第181章第196章第63章第7章第217章第156章第45章第190章第44章第155章第43章第126章第124章第178章第92章第27章第189章第151章第185章第223章第19章第4章第48章第57章第219章第6章第25章第86章第203章第161章第106章第4章
主站蜘蛛池模板: 蒙山县| 临海市| 延川县| 和平县| 峨边| 民县| 东方市| 兴和县| 宣恩县| 淳化县| 台湾省| 木里| 阿克陶县| 绥芬河市| 永兴县| 乐昌市| 双桥区| 景洪市| 拉萨市| 横山县| 贵定县| 通城县| 凤阳县| 南丰县| 武川县| 朝阳县| 峡江县| 襄汾县| 武功县| 平湖市| 南和县| 新津县| 宜昌市| 阳城县| 旬阳县| 龙井市| 丽水市| 南部县| 泽州县| 淮南市| 高要市|