NikolayAlb
@NikolayAlb

Чем различаются паттерны Стратегия и Строитель?

Билдер по сути набор предопределенных алгоритмов с общим интерфейсом, которые использует "директор", директор получает строителя и с его помощью создает/модифицирует какой-то объект.
Стратегия так-же по сути набор предопределенных алгоритмов с общим интерфейсов, которые использует "контекст", контекст получает алгоритм и с его помощью выполняет определенные операции.

Так в чем концептуальная разница? Даже их диаграммы почти идентичны. Единственное, что сам смог отметить - строитель компонует и возвращает объект.
Хотелось-бы с примерами ответ.
  • Вопрос задан
  • 438 просмотров
Решения вопроса 1
qonand
@qonand
Software Engineer
по сути набор предопределенных алгоритмов с общим интерфейсом

В мире программирования слишком многие вещи можно так охарактеризовать. Поэтому вообще не стоит использовать этот критерий для оценки схожести паттернов. Различие между всеми паттернами заключается в их назначении, то есть в том какую задачу тот или иной паттерн решает и какую зону ответственности он имеет.

Возьмем для примера билдер:
class Builder {

	protected $obj;

	public function create(){
		$this->obj = new HtmlDocument();
	}
	
	public function addHeader(){
		// добавляем хедер в $this->obj
	}
	
	public function addFooter(){
		// добавляем футер в $this->obj
	}
	
	public function getObj(){
		return $this->obj;
	}
}


Какое назначение билдера? Создание сложного объекта и предоставление интерфейса для его конфигурации. При этом информацией о том как будет в конкретной ситуации будет сконфигурирован объект билдер не обладает - это задача классов использующих его.

А теперь давайте возьмем стратегию:
interface CalculateDiscountInterface {

	public function execute($price);
}

class ClientCalculateDiscount implements CalculateDiscountInterface {

	public function execute($price){
		// рассчитываем цену по одному алгоритму
	}
}

class ParterCalculateDiscount implements CalculateDiscountInterface {

	public function execute($price){
		// рассчитываем цену по другому алгоритму
	}
}


Какое назначение стратегии? Реализация одной и той же функциональности по разным алгоритмам, с возможностью замены друг другом.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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