2014-03-31 69 views
0

我看到的所有戰略模式參考都顯示混凝土沒有狀態(成員數據)。但是,我想知道它是否可以,有時可能有用,例如:策略模式允許狀態嗎?

class bark_strategy { 
public: 
    virtual void execute() = 0; 
}; 

class bowwow : public bark_strategy { 
public: 
    bowwow(unsigned int t) : m_tired(t), m_count(0) {} 
    virtual void execute() override 
    { 
     if (m_count < m_tired) 
     { 
      ++m_count; 
      std::cout << "bowwowwowwowwowwowwow..." << std::endl; 
     } 
     else 
     { 
      std::cout << "bow..." << std::endl; 
     } 
    } 

private: 
    unsigned int m_tired; 
    unsigned int m_count; 
}; 

策略模式是否允許狀態?如果沒有,有什麼缺點?

回答

2

當然你可以使用狀態。設計模式只是人們交流特定設計思想的慣例。它不會限制你。

在這種情況下,策略模式是抽象出不同執行方式的一種方式,以便用戶可以在運行時決定他們想要執行的方式。你已經使用多態來實現它。 「國家」只是程序設計的另一部分,與模式無關。你需要考慮從程序的角度來看這是否是好的,而不是它是否是一種模式。

即使有某種設計干擾了戰略模式左右,這使得它不是戰略模式,只要它符合您的設計目標,它仍然很好。