Я сегодня разобрал шаблон стратегия, на примере JS вот отсюда
https://ru.wikipedia.org/wiki/Стратегия_(шаблон_проектирования)#.D0.9F.D1.80....
То что там нписано в самой статье, я вобще нихрена не понял, какая-то билеберда. Решил, что по коду пойму. Не понял:) Сам код то я понял, что он делает, собственно, я его даже «улучшил», путем выкидывания разногоо рода говна. Вот что в моей версии получилось
create=Object.create
Strategy={
exec: function(){},
message: "foo"
}
Strategy.WindowStatus=create(Strategy)
Strategy.NewWindow=create(Strategy)
Strategy.Alert=create(Strategy)
with(Strategy){
WindowStatus.exec=function(){status=message}
NewWindow.exec=function(){
open("", "_blank").document.write("<html>"+message+"</html>")
}
Alert.exec=function(){alert(message)}
}
with(Strategy){
WindowStatus.exec()
NewWindow.exec()
Alert.exec()
}
Сначала пара вопросов по реализации.
Я пропускаю момент засирания синтаксическим мусором, это ладно, проехали.
Зачем они там наследуют не от самого Strategy, а от его экземпляров? То есть, фактически все эти их подклассы имеют разных родителей. В этом есть какой-то смысл?
Дальше, я не понял, зачем они создают обертку «Context»?
Далее, они зачем-то создают экземпляры для каждого класса, хотя необходимости в этом тоже никакой нет, можно также вызвать эти экзеки из самих классов(что я и сделал), но это, ладно, может быть просто для понта создали экземпляры, не столь важно.
Теперь самый главный вопрос: В ЧЕМ ЗАКЛЮЧАЕТСЯ СТРАТЕГИЯ? Уж не в том ли, чтобы поочередно вызвать 3 функции?
Заранее спасибо.