2013-09-21 122 views
0

假設我們有一個模板「模式」。模板模式最佳實踐

方法1:

a = getA(); 
b = getB(a); 
c = getC(b); 

方法2:

getA() { 
    getB(a); 
} 

getB(a) { 
    getC(b); 
} 

getC(b) { 
    // do stuff 
} 

方法3:

getC (getB (getA()))) 

問題: 哪一個是優選的實踐中,假設木屐,getB和GETC正在執行離散工作,例如:getA是sort(),getB是search()?如果回答不是基於意見的,並且通常採用某種方法,那麼這種模式是否有任何名稱?

+0

在方法2中: GetA()如何獲取變量b? 類似於GetB()和GetC()。 誰在傳遞參數? –

回答

0

我相信這可能屬於Modularity [1]。

所以,因爲工作是離散的,這將折現法2.

方法1和3非常相似。我個人更喜歡方法1,但我找不到折扣方法3的任何客觀原因。

[1]:維基百科似乎專注於更大的圖片(例如,Java中的包,C++中的命名空間(?) ),但同樣的邏輯應該適用於方法級別。

+0

是的,作爲一個經驗法則,如果函數是離散的而不是任何依賴關係,那麼首選1或3,否則去2。 – JavaDeveloper

0

首先,您的第一個和第三個選項是完全相同的,除了第三個方法以某種方式縮短之外。但第二個是不同的。如果您嘗試使用第二種方法,則每次致電getA()時都需要致電getB()getB()的情況也是如此,它總是呼叫getC()。所以調用者無法改變方法調用的順序。訂單將由方法本身在內部進行管理。因此,如果這三種方法是類的一部分,則getB()getC()是成爲該類私有成員的良好候選者,而getA()是公開的,並且每個客戶端都必須通過此方法與包含類進行交互。

這樣,作爲類的設計者,您已經控制了客戶端可以使用您的API來操作類的實例的方式。如果我們接受這些都是班級的一部分,那麼使用這種技術,請記住我(在某種程度上)在面向對象編程中使用封裝信息隱藏原則。

此外,通過繼承這個類並覆蓋getA()(它是否被定義爲抽象或不抽象),它可以被認爲是模板方法(某種模板設計模式)。

+0

非常有效的分數 – JavaDeveloper