Различие между шаблоном Стратегической модели и Делегации

Присвоение структуры прохладно. Многие люди, кажется, не понимают, что структуры являются значениями также и могут быть присвоены вокруг, нет никакой потребности использовать memcpy(), когда простое присвоение добивается цели.

, Например, рассмотрите некоторую мнимую 2D графическую библиотеку, она могла бы определить тип для представления (целочисленной) координаты экрана:

typedef struct {
   int x;
   int y;
} Point;

Теперь, Вы делаете вещи, которые могли бы выглядеть "неправильными", как запись функция, которая создает точку, инициализированную из аргументов функции, и возвращает его, как так:

Point point_new(int x, int y)
{
  Point p;
  p.x = x;
  p.y = y;
  return p;
}

Это безопасно, настолько долго (конечно), как возвращаемое значение копируется значением с помощью присвоения структуры:

Point origin;
origin = point_new(0, 0);

Таким образом можно записать довольно чистый и код объектно-ориентированного выхода, все в простом стандарте C.

19
задан Stanislav Pankevich 24 August 2015 в 18:05
поделиться

2 ответа

the strategy pattern is a very specific design solution to a common software problem. the strategy pattern implies that there will be

  • an interface called Strategy (or with Strategy as part of the name). this interface should have a method called execute().
  • one or more concrete classes called something like ConcreteStrategyA, ConcreteStrategyB, etc. that implement the Strategy interface.
  • there should also be a context class that contains the Strategy

delegation is more a principal than a pattern. delegation implies that instead of having a single object be in charge of everything, it delegates responsibilities to other objects. the reason this is a common technique is that it enforces two even more fundamental principals of software development by lessening coupling and increasing cohesiveness.

Having said all that, don't worry about patterns. Focus on the principals and if you feel your solution could be improved upon - look to the patterns to see if there is a better mousetrap. If you focus on patterns instead of principals, you will find yourself getting lost in all the patterns and implementing patterns for the sake of implementing patterns...

22
ответ дан 30 November 2019 в 03:38
поделиться

«Делегирование» на самом деле не является шаблоном проектирования, это скорее общий метод программирования, когда компонент A делегирует задачу (какой бы вид задачи она ни была) компоненту B. Делегирование можно использовать во многих контекстах.

С другой стороны, шаблон стратегии - это особый шаблон, который обычно интенсивно использует делегирование в качестве детали реализации.

Например, вы можете реализовать шаблон стратегии и вызывать его, используя

strategy.execute(x)

Шаблон стратегии предполагает наличие различных реализаций интерфейса вашей стратегии и выбор соответствующей реализации во время выполнения. Актом вызова этой реализации является делегирование.

Так что это не либо / или, концепции дополняют друг друга.

12
ответ дан 30 November 2019 в 03:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: