Превращение моих наследованных классов на Абстрактной 'фабрике' C#

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

У меня есть абстрактный класс под названием BaseDevice. Другие устройства, как Маяк и Транспондер, наследовались BaseDevice. Например, Маяк, это имеет методы BaseClass ПЛЮС свои собственные свойства и методы. Скажем, различие между этими устройствами - то, что у каждого есть 2 светодиода, и у каждого есть жидкокристаллический дисплей

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

Так, например, я хочу смочь заставить Устройство сказать ему: "У Вас есть один светодиод", "У Вас есть 2 LCDs" или что бы то ни было. и все методы и свойства, которые идут с ним, должны быть доступными. Я все еще должен смочь видеть то, что делает устройство в моем списке устройств "У него есть один (или больше) светодиод"

Заключение: Я хочу сделать поворот мой, "" в, ""Имеет" (как Банда Четыре рекомендует).

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

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

1
задан Péter Török 23 June 2010 в 09:04
поделиться

2 ответа

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

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

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

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

1
ответ дан 2 September 2019 в 23:35
поделиться

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

1
ответ дан 2 September 2019 в 23:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: