Как сделать сравнение операцией, реализованной подклассами и шаблоном шаблона?

Я начал самостоятельно изучать шаблоны проектирования из Design Patterns от Gang of Four

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

  1. операция, реализованная подклассами (применение шаблона Template (325)),
  2. ответственность объекта, который передается в процедуру сортировки (Стратегия (315)), или
  3. аргумент шаблона 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;
  }
}
Другие вопросы по тегам