Стратегия (шаблон проектирования): различия между версиями

[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
Строка 157:
{
public:
virtual ~Strategy(void) {}
~Strategy(void){}
 
virtual void use(void) = 0;
};
Строка 166 ⟶ 164 :
{
public:
Strategy_1(){}
~Strategy_1(){}
 
void use(void){ std::cout << "Strategy_1" << std::endl; };
};
Строка 175 ⟶ 170 :
{
public:
Strategy_2(){}
~Strategy_2(){}
 
void use(void){ std::cout << "Strategy_2" << std::endl; };
};
Строка 184 ⟶ 176 :
{
public:
Strategy_3(){}
~Strategy_3(){}
 
void use(void){ std::cout << "Strategy_3" << std::endl; };
};
Строка 193 ⟶ 182 :
{
protected:
Strategy* operation;
 
public:
virtual ~Context(void) {}
virtual void UseStrategyuseStrategy(void) = 0;
~Context(void){}
virtual void SetStrategysetStrategy(Strategy* v) = 0;
 
virtual void UseStrategy(void) = 0;
virtual void SetStrategy(Strategy* v) = 0;
};
 
class Client: public Context
{
public:
Clientvoid useStrategy(void){}
~Client(void){}
 
void UseStrategy(void)
{
operation->use();
}
 
void SetStrategysetStrategy(Strategy* o)
{
operation = o;
Строка 220 ⟶ 204 :
};
 
int main (int /*argc*/, char* /*argv*/[])
{
Client customClient;
Строка 227 ⟶ 211 :
Strategy_3 str3;
 
customClient.SetStrategysetStrategy(&str1);
customClient.UseStrategyuseStrategy();
customClient.SetStrategysetStrategy(&str2);
customClient.UseStrategyuseStrategy();
customClient.SetStrategysetStrategy(&str3);
customClient.UseStrategyuseStrategy();
 
return 0;
Строка 249 ⟶ 233 :
struct Strategy_1
{
void do_methoduse(){ std::cout << "Strategy_1" << std::endl; };
};
 
struct Strategy_2
{
void do_methoduse(){ std::cout << "Strategy_2" << std::endl; };
};
 
struct Strategy_3
{
void do_methoduse(){ std::cout << "Strategy_3" << std::endl; };
};
 
template <class Operation>
classstruct Client: public Operation
{
void useStrategy()
public:
{
void UseStrategy()
this->do_methoduse();
{
}
this->do_method();
}
};
 
int main (int /*argc*/, char* /*argv*/[])
{
Client<Strategy_1> customClient1;
customClient1.UseStrategyuseStrategy();
 
Client<Strategy_2> customClient2;
customClient2.UseStrategyuseStrategy();
 
Client<Strategy_3> customClient3;
customClient3.UseStrategyuseStrategy();
 
return 0;