Как сделать сравнение операцией, реализованной подклассами и шаблоном шаблона?
Я начал самостоятельно изучать шаблоны проектирования из Design Patterns от Gang of Four
Параметризованные типы дают нам третий способ (в дополнение к наследованию классов и составлению объектов) для составления поведения в объектно-ориентированных системах. Многие проекты могут быть реализованы с использованием любого из этих трех методов. Чтобы параметризовать процедуру сортировки по операции, которую она использует для сравнения элементов, мы могли бы сделать сравнение
- операция, реализованная подклассами (применение шаблона Template (325)),
- ответственность объекта, который передается в процедуру сортировки (Стратегия (315)), или
- аргумент шаблона C++ или Ada generic, который задает имя функции, вызываемой для сравнения элементов.
Я искал шаблон шаблона, но все еще задавался вопросом, как сделать первый способ "сделать сравнение операцией, реализуемой подклассами (применение шаблона метода)"?
Я был бы признателен за некоторые примеры на любом языке ОО: C++, C#, Java, Python, ... Спасибо.
1 ответ
Они в основном говорят о чем-то вроде этого:
class Sorter {
sort(Collection c) {
...
if (isLessThan(a, b)) ...
...
}
abstract isLessThan();
}
class MyTypeSorter(Sorter) {
isLessThan(a, b) {
return a.member < b.member;
}
}