2013-05-15 63 views
1

我的課是這樣的:一流的設計:如何排序或交替邏輯添加到API

class FB_I { 
    public: 
    virtual void foo() = 0; 
    virtual void bar() = 0; 
}; 

class TEE_I { 
    public: 
    virtual void tee() = 0; 
}; 

class C: public FB_I, public TEE_I { 
    public: 
    virtual void foo(); 
    virtual void tee(); 
}; 

現在我認識到FOO()和bar()實際上不是完全獨立的,FOO()必須是在bar()之前調用。

我不知道什麼是處理此給出以下的最佳解決方案:

  1. 我不想在C添加邏輯:: foo的()和C ::三通()來捕捉無序呼叫。
  2. 我可以使用解決方案作爲模式來處理另一種情況,foo()和bar()是替代API:當一個被調用時,另一個不應該是。
+0

您將如何趕上如果事情被調用或沒有補充說,邏輯是什麼?即使有它的一個功能,它會在內部做到這一點。 而且也沒有你用有效的虛函數覆蓋bar的地方。您應該通過提供適當的書面文檔來處理這兩種情況。 – Etherealone

回答

2

使用Template Method,有時也被稱爲Non-Virtual Interface

struct FB_I { 
    void baz() { 
     foo(); 
     bar(); 
    } 
private: 
    virtual void foo() = 0; 
    virtual void bar() = 0;  
}; 
+0

+1另一種方法是用適當的邏輯定義foo()和bar(),並分別調用doFoo()和doBar()。 – Brady