設計模式-策略模式Strategy(對象行爲型)

一、概述

策略模式就是定義一組算法,將每個算法封裝起來,並且使它們之間可以互換。

(1)Strategy抽象策略角色

每個策略或者算法必須具有的方法和屬性

(2)ConcreteStrategy具體策略角色

實現策略中的操作,該類含有具體的算法

(3)Context封裝角色,上下文角色

啓封裝作用,屏蔽高層模塊對策略、算法的直接訪問,封裝可能存在的變化

class Strategy
{
public:
    virtual void DoSomething();
};

class ConcreteStrategy1 : public Strategy
{
public:
    virtual void DoSomething();
};

class ConcreteStrategy2 : public Strategy
{
public:
    virtual void DoSomething();
};

class Context
{
public:
    Context(Strategy* pStrategy)
        :m_objStrategy(*pStrategy)
    {
    }
    
    void DoAnything()
    {
        m_objStrategy.DoSomething();
    }
private:
    Strategy m_objStrategy;
};

void main()
{
    Strategy* pStrategy = new ConcreteStrategy1();
    Context context = new Context(pStrategy);
    context.DoAnything();
}

二、總結

策略模式可以封裝多個策略算法,保證對外提供“可自由切換”的策略,擴展性好。

策略模式需要上層模塊必須知道有哪些策略,然後才能決定使用哪一個,這與迪米特法則相違背。策略模式的這一缺點,可以通過和其他模式結合來彌補,例如工廠方法模式、代理模式或享元模式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章