您的位置:首页 > 其它

设计模式之策略模式

2015-09-18 10:46 232 查看
策略模式中:将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式把行为和环境分开。




//strategy.h
class Strategy{}
public:
Strategy();
virtual ~Strategy()
{
cout<<"straegy"<<endl;
}

virtual void AlgorithmInterface() =0;

;


//ConcreteStrategyA
class ConcreteStrategyA:public Strategy{
public:
ConreteStrategyA();
virtual ~ConcreteStrategyA(){
cout<<"~ConcreteStrategyA"<<endl;

}
void AlgorithmInterface(){

cout<<"AlgoA"<<endl;
}

}

//ConcreteStrategyB
class ConcreteStrategyB:public Strategy{
public:
ConreteStrategyB();
virtual ~ConcreteStrategyB(){
cout<<"~ConcreteStrategyB"<<endl;

}
void AlgorithmInterface(){

cout<<"AlgoB"<<endl;
}

}


//Context
class Context{
public: Context(Strategy *stg):m_stg(stg){}
~Context(){
if(!m_stg)
delete m_stg;
}

void DoAction(){
m_stg->AlgorithmInterface();
}

private:
Strategy *m_stg;

};


//test main

int main(void){

Strategy *ps;
ps = new StrategyA();
Context *pc = new Context(ps);
pc->DoAction();
if(NULL != pc)
delete pc;
return 0;
}


优点

1)“黑盒”复用,因为被包含对象的内部细节对外是不可见的;

2)封装性好,原因为 1);

3)实现和抽象的依赖性很小(组合对象和被组合对象之间的依赖性小);

4)可以在运行期间动态定义实现(通过一个指向相同类型的指针,典型的是抽象基类的指针。

缺点

系统中对象过多。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: