Éè¼ÆÄ£Ê½Ö®strategyģʽ(C++ʵÏÖ) (¶þ)

2014-11-24 02:32:57 ¡¤ ×÷Õß: ¡¤ ä¯ÀÀ: 4
text contextC(&concreteStrategyC);

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<<("-----------¸Õ¸Õµ½Îâ¹úµÄʱºò²ðµÚÒ»¸ö-------------")< ContualClass *context = new ContualClass(new Fun1()); //Äõ½Ãî¼Æ
context->Operator(); //²ð¿ªÖ´ÐÐ


//Áõ±¸ÀÖ²»Ë¼ÊñÁË£¬²ðµÚ¶þ¸öÁË
cout<<("-----------Áõ±¸ÀÖ²»Ë¼ÊñÁË£¬²ðµÚ¶þ¸öÁË-------------")< context = new ContualClass(new Fun2());
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<<("-----------¸Õ¸Õµ½Îâ¹úµÄʱºò²ðµÚÒ»¸ö-------------")< ContualClass *context = new ContualClass(new Fun1()); //Äõ½Ãî¼Æ
context->Operator(); //²ð¿ªÖ´ÐÐ


//Áõ±¸ÀÖ²»Ë¼ÊñÁË£¬²ðµÚ¶þ¸öÁË
cout<<("-----------Áõ±¸ÀÖ²»Ë¼ÊñÁË£¬²ðµÚ¶þ¸öÁË-------------")< context = new ContualClass(new Fun2());
context->Operator(); //Ö´ÐÐÁ˵ڶþ¸ö½õÄÒÁË

//ËïȨµÄС±ø×·ÁË£¬Õ¦°ì£¿²ðµÚÈý¸ö
cout<<("-----------ËïȨµÄС±ø×·ÁË£¬Õ¦°ì£¿²ðµÚÈý¸ö")<

context = new ContualClass(new Fun3());
context->Operator(); //Ëï·òÈËÍ˱ø
system("pause");
return 0;
}
Õâ¸öÀý×ÓºÜÖ±¹Û°É£¬ÏÖÔÚºÜ¶àµØ·½¶¼ÓÃÕâ¸öÀ´½âÊͲßÂÔģʽ£¡ÓÖµ½·¹µãÁË£¬ÉÁÁË