Разница между Template Method Pattern и использованием абстрактных (базовых) классов? - PullRequest
2 голосов
/ 02 апреля 2012

После нескольких часов (пере) поиска я просто не могу придумать объяснимую разницу между обычным классом Abstract и использованием шаблона Template.

Единственное, что я вижу, это: whileиспользуя абстрактный класс, вы обязаны реализовать все методы.Но при использовании Template Method вам просто нужно реализовать эти пару абстрактных методов.

Может кто-нибудь объяснить мне (не?) Преимущества Template Pattern и основное отличие между Template Pattern и Abstract Class.

ps Я просто хочу узнать это лучше для моего собственного понимания / учебы

РЕДАКТИРОВАТЬ : Спасибо за быстрый ответ!Но я объясню это немного лучше (потому что это уже идет правильным путем :)).Я знаю, что такое абстрактный класс!(и класс, какие методы вы должны реализовать!), и я знаю основную идею шаблона шаблона (своего рода каркас процедурного алгоритма, определенного в классе?).Я немного смущен, потому что они похожи!Кроме того, я не англичанин, поэтому возможно, что я что-то наблюдаюTHNX заранее

Ответы [ 2 ]

2 голосов
/ 02 апреля 2012

Как вы сказали, Шаблон - это шаблон.Абстрактный класс - это языковая конструкция, которую можно использовать для реализации шаблона.Некоторые языки (например, Python или JavaScript) не имеют понятия абстрактных классов, но это не значит, что вы не можете реализовать в них Template, просто вам нужно использовать другой контракт.

Одним из преимуществ наличия абстрактных классов на языке является то, что вы можете обеспечить реализацию необходимых шаблонных методов (контракт) во время компиляции.На языке, подобном JavaScript, контракт не может быть приведен в исполнение и может быть определен только через соглашения / документацию.

1 голос
/ 30 марта 2016

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

Представьте шаблон шаблона как подмножество абстрактного класса.Это должно очистить ваше сомнение.

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

...