Превращение моих унаследованных классов в абстрактный «фабричный» C # - PullRequest
1 голос
/ 23 июня 2010

Я не совсем профессионал и считаю, что мой вопрос довольно сложно описать, поэтому, пожалуйста, спросите, если что-то неясно:

У меня есть абстрактный класс с именем BaseDevice. Другие устройства, такие как Beacon и Transponder, наследуются от BaseDevice. Например, Beacon, он имеет методы BaseClass PLUS со своими собственными свойствами и методами . Допустим, разница между этими устройствами состоит в том, что у одного есть 2 светодиода, а у другого - ЖКД

В настоящее время невозможно сделать транспондер устройства так же, как и маяк (или я должен скопировать обе пасты в один новый класс, который не нужен).

Так, например, Я хочу, чтобы устройство могло сказать ему: «У вас есть один светодиод», «У вас есть 2 ЖК-дисплея» или что-то еще. и все методы и свойства, которые идут с этим, должны быть доступны. Мне все еще нужно увидеть, какое устройство в моем списке устройств "У него есть один (или несколько) светодиодов"

Заключение: я хочу превратить свое «Есть» в «Имеет А» (как рекомендует «Банда четырех»).

Я однажды читал о шаблоне проектирования фабрики , который выглядел сложным. Будет ли это хорошим решением в этом случае?

Может быть, я использовал некоторые термины, которые превосходят мои знания, этот проект - первый, в котором я использовал абстрактные классы и т. Д. Я действительно не такой уж и большой объектно-ориентированный программист. Шаблоны проектирования довольно сложны для меня, поэтому ответы, которые легко прочитать, приветствуются.

Ответы [ 2 ]

1 голос
/ 23 июня 2010

Я думаю, что вам нужны некоторые дополнительные классы для компонентов ваших устройств. Например, если есть какое-то поведение, связанное со светодиодами, и вы обнаружите, что копируете / вставляете этот код, это сильный знак того, что вам нужен класс светодиодов. Таким образом, вы можете использовать поле List<LED> и метод Add(LED newLed), которые вы можете использовать для конкретных компонентов. По сути это отношения "Имеет А". У вас может быть другой класс для ЖК-дисплеев, и теперь вы можете смешивать и сочетать те вещи, которые вам нравятся в ваших конкретных классах.

1 голос
/ 23 июня 2010

Для меня это звучит так, как будто вам нужен Decorator .

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

Шаблон декоратора является альтернативой подклассам.Подклассы добавляют поведение во время компиляции, и изменение влияет на все экземпляры исходного класса;Декорирование может обеспечить новое поведение во время выполнения для отдельных объектов.

Сложной задачей для вас будет определение общего интерфейса для всех подклассов.Если это невозможно, вы все равно не сможете использовать свои объекты полиморфно.

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