Шаблон проектирования C # для 2 классов с одинаковой реализацией, но с другим базовым классом - PullRequest
3 голосов
/ 02 декабря 2010

Возьмите два базовых класса A и B, которые похожи, но предпочтительны, чтобы отличаться.У каждого есть подкласс (A 'и B'), которые добавляют одинаковые функциональные возможности и члены к своим соответствующим классам.Есть ли шаблон проектирования, который позволил бы мне не дублировать код в A 'и B'?

Я смотрел на Bridge и Decorator, но я не вижу, как они будут работать.

Спасибо, Роб

Ответы [ 5 ]

11 голосов
/ 02 декабря 2010

Не могли бы вы использовать композицию и рефакторинг общего кода в другой класс C?

2 голосов
/ 02 декабря 2010

Шаблон стратегии.Создайте общий код в третьем классе и поместите в него экземпляр в A и B.

2 голосов
/ 02 декабря 2010

Возьмите два базовых класса A и B, которые похожи, но предпочтительнее различны. У каждого есть подкласс (A 'и B '), которые добавляют ту же функциональность и члены их соответствующих классы.

Это немного странное место для начала. Если бы это был я, я бы хотел изменить эту часть дизайна.

Предполагая, что это не разумно, по какой-то причине, я думаю, что Decorator - лучшее, что вы можете сделать, чтобы избежать дублирования кода.

Вам нужно будет создать подклассы A & B. И вам придется объявить добавленные методы и свойства в каждом. Эти члены должны делегировать членам другого класса, которые могут реализовать общую функциональность. Экземпляр этого класса будет содержаться как в A, так и в B.

Это действительно спасет вас от дублирования, только если реализация этих общих членов значительна.

0 голосов
/ 02 декабря 2010

Концепция миксинов приближается к тому, что вы хотите. Однако эта концепция изначально не поддерживается C #. Вы можете использовать интерфейсы и методы расширения, чтобы имитировать концепцию миксинов, но это выглядит не очень красиво.

Посмотрите на этот вопрос для получения дополнительной информации: Можно ли реализовать миксины в C #?

0 голосов
/ 02 декабря 2010

add the same functionality and members to their respective classes.Звучит близко к интерфейсу, хотя это все еще имеет отдельные реализации.Может быть, что-то похожее на шаблон Provider?http://msdn.microsoft.com/en-us/library/ms972319.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...