小A:“又應(yīng)該怎樣去理解模板方法模式與對象的封裝性?”
大B:“面向?qū)ο蟮娜筇攸c(diǎn):繼承,封裝,多態(tài)。對象有內(nèi)部狀態(tài)和外部的行爲(wèi)。封裝是爲(wèi)了信息隱藏,通過封裝來維護(hù)對象內(nèi)部數(shù)據(jù)的完整性。使得外部對象不能夠直接訪問一個對象的內(nèi)部狀態(tài),而必須通過恰當(dāng)?shù)姆椒ú拍茉L問。在java語言中,採用給對象屬性和方法賦予指定的修改符(public,protected,private)來達(dá)到封裝的目的,使得數(shù)據(jù)不被外部對象惡意的訪問及方法不被錯誤調(diào)用從而破壞對象的封裝性。降低方法的訪問級別,也就是最大化的降低方法的可見度是一種很重要的封裝手段。最大化降低方法的可見度除了可以達(dá)到信息隱藏外,還能有效的降低類之間的耦合度,降低一個類的複雜度。還可以減少開發(fā)人員發(fā)生的的錯誤調(diào)用。一個類應(yīng)該只公開外部需要調(diào)用的方法。而所有爲(wèi)公開方法服務(wù)的方法都應(yīng)該聲明爲(wèi)protected或private。如是一個方法不是需要對外公開的方法,但是它需要被子類進(jìn)行擴(kuò)展或調(diào)用。那麼把它定義爲(wèi)protected。否則應(yīng)該爲(wèi)private。顯而易見,模板方法模式中的聲明爲(wèi)abstract的基本操作都是需要迫使子類去實(shí)現(xiàn)的,它們僅僅是爲(wèi)模板方法placeOrder服務(wù)的。它們不應(yīng)該被AbstractOrder所公開,所以它們應(yīng)該protected。”
代碼:
protectedabstractintgetOrderItemPrice(OrderItemorderItem);
protectedabstractintgetSpendingLimit(intcustomerId);
protectedabstractintsaveOrder(intcustomerId,inttotal,ListorderItemList);
rendercode();
模板方法模式中,基本方法應(yīng)該聲明爲(wèi)protctedabstract。