2009-11-25 62 views
1

請看看我想出的這段代碼。模板模式違反封裝?

abstract class Command 
    { 
    public void Execute(string[] commandParameters) 
    { 
     CommandResult result = ExecuteCommand(commandParameters); 
     PrintResult(result); 
    } 

    public abstract CommandResult ExecuteCommand(string[] commandParameters); 
    public abstract void PrintResult(CommandResult result); 
    } 

將會有幾個命令從這個Command類繼承。每個命令都會覆蓋ExecuteCommand和PrintResult。儘管使用這種設計,對於客戶端代碼,我公開了更爲奇怪的Execute和ExecuteCommand函數。我覺得我需要爲一個函數定義一個模板,但不會暴露該模板中使用的其他函數!重構傢伙,我的代碼幾乎一直都很爛,請讓我知道什麼可能是最好的出路。

回答

2

ExecuteCommandPrintResult保護而不是公開。通過這樣做,它僅對子類可見,但對一般客戶端代碼不可見。

+0

謝謝,這很快。 – theraneman 2009-11-25 07:10:37