Coguar / OOD

0 stars 0 forks source link

Замечания по паттерну "Стратегия" #1

Open alexey-malov opened 8 years ago

alexey-malov commented 8 years ago
    virtual void Dance()
    {
        m_danseBehavior->Dance();
    }

При использовании паттерна Стратегия методы не нужно делать виртуальными, т.к. изменение поведения класса обеспечивается не за счет наследования, а за счет композиции.

alexey-malov commented 8 years ago
class Flyable :public IFlyBehavior
{
public:

    void Fly() override
    {
        FlyMethod();
        ++m_flightCounter;
        cout << "it's my " << GetFlightCount() << " flight" << endl;
    }

    virtual void FlyMethod()
    {
        cout << "I'm flying!!" << endl;
    }

private:

    size_t GetFlightCount()
    {
        return m_flightCounter;
    }

    size_t m_flightCounter = 0;
};

class FlyWithWings :public Flyable
{
public:

    void FlyMethod() override
    {
        cout << m_flyMethodName.c_str() << endl;

    }
private:

    const string m_flyMethodName = "I'm flying with wings!!";

    size_t flightCount = 0;
};

метод size_t GetFlightCount() должен быть константным.

класс Flyable используется только в одном месте и совершенно излишен. частично дублируется реализация FlyWithWings и Flyable

m_flyMethodName плохо соответствует своему предназначению

alexey-malov commented 8 years ago

задание 1 - k=0,9 задание 2 - k=0,6