Шаблон проектирования Стратегия(Strategy)

Июль 22nd, 2011 § 1 comment

Сегодня разберем паттерн проектирования Стратегия (Strategy). Паттерн относится к группе паттернов поведения. Применяется в том случае когда нам надо инкапсулировать семейство алгоритмов, подставляя один в место другого, меня алгоритм вне зависимости от клиента. Ниже приводу пример на C++/C#.


#include <iostream>
using namespace std;

class Strategy
{
public:
 virtual void DoAlgo()=0;
};
class Context
{
private:
 Strategy* strategy;
public:
 Context(Strategy* strategy);
 void ExecuteStrategy();

};
Context::Context(Strategy* strategy)
{
 this->strategy = strategy;
}
void Context::ExecuteStrategy()
{
 return this->strategy->DoAlgo();
}

class Sort : Strategy
{
public:
 void DoAlgo();
};
void Sort::DoAlgo()
{
 cout<<"Iam do Sort yah-yah!!! xDDD"<<endl;
}
class Compute :Strategy
{
public:
 void DoAlgo();
};
void Compute::DoAlgo()
{
 cout<<"Iam do Compute yah-yah!!! xDDD"<<endl;
}

int main()
{
 Sort* sort=new Sort;

 Context* comp=new Context((Strategy*)sort);
 comp->ExecuteStrategy();

 Context* comp2=new Context((Strategy*)&Compute());
 comp2->ExecuteStrategy();

 getchar();
 return 0;
}

Реализация на C#


public interface Strategy
 {
 void DoAlgo();
 }

class Context
 {
 private Strategy strategy;
 public Context(Strategy strategy)
 {
 this.strategy = strategy;
 }
 public void Execute()
 {
 this.strategy.DoAlgo();
 }
 }

public class Sort: Strategy
 {
 public void DoAlgo()
 {
 Console.WriteLine("I am sorting, really!!! xDDD");
 }
 }

public class Compute: Strategy
 {
 public void DoAlgo()
 {
 Console.WriteLine("I am computing, yah-yah!!! xDDD");
 }
 }

class Program
 {
 static void Main(string[] args)
 {
 Context context = new Context(new Sort());
 Context context2 = new Context(new Compute());
 context.Execute();
 context2.Execute();
 Console.ReadKey();
 }
 }

§ One Response to Шаблон проектирования Стратегия(Strategy)

  • Sergey пишет:

    Паттерн понятен.
    Но не понятна польза от него.
    В main совсем не вижу преимуществ этого патерна и его назначение.

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Смотреть фильмы онлайн