一、概述
策略模式就是定義一組算法,將每個算法封裝起來,並且使它們之間可以互換。
(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();
}
二、總結
策略模式可以封裝多個策略算法,保證對外提供“可自由切換”的策略,擴展性好。
策略模式需要上層模塊必須知道有哪些策略,然後才能決定使用哪一個,這與迪米特法則相違背。策略模式的這一缺點,可以通過和其他模式結合來彌補,例如工廠方法模式、代理模式或享元模式。