contextA.execute(); //º¯ÊýÄÚ²¿ÀûÓöà̬µ÷ÓÃÏàÓ¦µÄ·½·¨£¡
contextB.execute();
contextC.execute();
contextA.set_strategy(&concreteStrategyB);
contextA.execute();
contextA.set_strategy(&concreteStrategyC);
contextA.execute();
return 0;
}
ÉÏÊöµÄÀý×ÓÒѾ×ãÒÔÃ÷°×²ßÂÔģʽµÄÒ»°ãʵÏÖ·½Ê½ÁË£¬½ÓÏÂÀ´¿´µÚ¶þ¸öÎÊÌâ
Ê×ÏÈÕâ¸ö³¡¾°ÀïÓÐÈý¸öÃî¼Æ£¬Ò»¸ö½õÄÒ£¬ÕÔÔÆÊÇ´ò¿ª½õÄÒ ·½·¨µÄÖ´ÐÐÕߣ¬ËùÒÔÓ¦¸ÃÔÚÖ÷º¯Êý£¬UMLͼÈçÏÂËùʾ
½ÓÏÂÀï¿´¿´ÈçºÎÓÃC++ʵÏÖÕâ¸ö³¡¾°£º
[cpp]
class IStrategy
{
public:
virtual void Operator() = 0;
};
class Fun1:public IStrategy
{
void Operator()
{
cout<<"ÕÒÇǹúÀϰïæ£¬ÈÃËïȨ²»É±Áõ±¸"<
};
class Fun2:public IStrategy
{
void Operator()
{
cout<<"ÇóÎâ¹úÌ«¿ª¸öÂ̵ƣ¬·ÅÐÐ"<
};
class Fun3:public IStrategy
{
void Operator()
{
cout<<"ÕÒËï·òÈ˶ϱø£¬ÕùÈ¡ÌÓ×ßµÄʱ¼ä"<
};
class ContualClass
{
private:
IStrategy * m_pSrategy;
public:
ContualClass() {}
ContualClass(IStrategy *pirevt)
{
this->m_pSrategy = pirevt;
}
void Operator()
{
m_pSrategy->Operator();
}
};
int main()
{
//¸Õ¸Õµ½Îâ¹úµÄʱºò²ðµÚÒ»¸ö
cout<<("-----------¸Õ¸Õµ½Îâ¹úµÄʱºò²ðµÚÒ»¸ö-------------")<
context->Operator(); //²ð¿ªÖ´ÐÐ
//Áõ±¸ÀÖ²»Ë¼ÊñÁË£¬²ðµÚ¶þ¸öÁË
cout<<("-----------Áõ±¸ÀÖ²»Ë¼ÊñÁË£¬²ðµÚ¶þ¸öÁË-------------")<
context->Operator(); //Ö´ÐÐÁ˵ڶþ¸ö½õÄÒÁË
//ËïȨµÄС±ø×·ÁË£¬Õ¦°ì£¿²ðµÚÈý¸ö
cout<<("-----------ËïȨµÄС±ø×·ÁË£¬Õ¦°ì£¿²ðµÚÈý¸ö")<
context = new ContualClass(new Fun3());
context->Operator(); //Ëï·òÈËÍ˱ø
system("pause");
return 0;
}
class IStrategy
{
public:
virtual void Operator() = 0;
};
class Fun1:public IStrategy
{
void Operator()
{
cout<<"ÕÒÇǹúÀϰïæ£¬ÈÃËïȨ²»É±Áõ±¸"<
};
class Fun2:public IStrategy
{
void Operator()
{
cout<<"ÇóÎâ¹úÌ«¿ª¸öÂ̵ƣ¬·ÅÐÐ"<
};
class Fun3:public IStrategy
{
void Operator()
{
cout<<"ÕÒËï·òÈ˶ϱø£¬ÕùÈ¡ÌÓ×ßµÄʱ¼ä"<
};
class ContualClass
{
private:
IStrategy * m_pSrategy;
public:
ContualClass() {}
ContualClass(IStrategy *pirevt)
{
this->m_pSrategy = pirevt;
}
void Operator()
{
m_pSrategy->Operator();
}
};
int main()
{
//¸Õ¸Õµ½Îâ¹úµÄʱºò²ðµÚÒ»¸ö
cout<<("-----------¸Õ¸Õµ½Îâ¹úµÄʱºò²ðµÚÒ»¸ö-------------")<
context->Operator(); //²ð¿ªÖ´ÐÐ
//Áõ±¸ÀÖ²»Ë¼ÊñÁË£¬²ðµÚ¶þ¸öÁË
cout<<("-----------Áõ±¸ÀÖ²»Ë¼ÊñÁË£¬²ðµÚ¶þ¸öÁË-------------")<
context->Operator(); //Ö´ÐÐÁ˵ڶþ¸ö½õÄÒÁË
//ËïȨµÄС±ø×·ÁË£¬Õ¦°ì£¿²ðµÚÈý¸ö context = new ContualClass(new Fun3());
cout<<("-----------ËïȨµÄС±ø×·ÁË£¬Õ¦°ì£¿²ðµÚÈý¸ö")<
context->Operator(); //Ëï·òÈËÍ˱ø
system("pause");
return 0;
}
Õâ¸öÀý×ÓºÜÖ±¹Û°É£¬ÏÖÔÚºÜ¶àµØ·½¶¼ÓÃÕâ¸öÀ´½âÊͲßÂÔģʽ£¡ÓÖµ½·¹µãÁË£¬ÉÁÁË