Шаблон проектирования шаблонов — как «поделиться» реализациями?

#design-patterns #ooad

#шаблоны проектирования #ooad

Вопрос:

Работаю над проектом, поэтому я попытаюсь обобщить это.

Допустим, у меня есть абстрактный класс A с абстрактным методом method() .

Существует 4 подкласса A: B, C, D и E, но B и C имеют одинаковую точную реализацию метода (), а D и E имеют одинаковую точную реализацию метода (). Как я могу организовать код таким образом, чтобы свести к минимуму дублирование кода?

Комментарии:

1. Вам действительно нужно использовать метод шаблона? У вас может быть два подкласса A — one для каждого метода. Тогда вы можете заставить B и C расширить один, а D и E расширить другой. Если вы не хотите больше подклассов и можете отказаться от метода шаблона, вы можете использовать шаблон стратегии: стратегию для каждого метода, а затем составлять классы с соответствующей стратегией.

Ответ №1:

поместите общий метод в A или в подкласс a. переопределите метод в тех случаях, когда он отличается.

Комментарии:

1. если я помещу метод в A, что, если существует несколько подклассов, которые имеют одинаковую реализацию, но отличаются от A?

2. вы можете поместить их в Asub1 и Asub2, а затем подклассировать тот, который вы хотите

3. должны ли Asub1 и Asub2 быть абстрактными? (A является абстрактным)

4. в любом случае. если реализация одной из них завершена, сделайте ее неабстрактной.