@ASMcoderSource

C# как правильно реализовать полиморфизм в конкретном случае?

Подскажите пожалуйста, как мне с точки зрения проектирования, лучше реализоваться полиморфизм для класса который принимает запросы на соединение клиентов через объект TcpListener.

Я бы хотел, чтобы я мог использовать его в разных программах, просто меняя окончательный объект который создается при соединении. Этот "окончательный" объект по итогу, берет на себя управление поведением соединения, добавляет ему различное новое поведение, или переопределяет виртуальные методы базового объекта соединения.

Моим решением стало создание дополнительного класса, который создает объекты (своего рода паттерн фабрики?), который я передаю в объект класса что слушает новые соединения. Он в свою очередь, при получении нового соединения, вызывает метод BaseConnection CreateConnection(TcpClient) объекта фабрики.

Идея в том что класс фабрики определяет метод создания объекта как виртуальный, и передав нужную "версию" фабрики, будут создаваться нужные объекты соединения.

Вопрос в том, допустимо ли такое решение с точки зрения "хорошего кода", или есть более правильные решения. Например, в С++ есть шаблоны, что в теории позволяет создать такое же поведение, указав в качестве типа шаблона нужный класс соединения

Код:
Класс который принимает новые соединения
https://github.com/ASMcoderSource/C_Sharp_Learn/bl...

Базовый класс для всех соединения
https://github.com/ASMcoderSource/C_Sharp_Learn/bl...

Пример переопределения поведения используя классы наследования
https://github.com/ASMcoderSource/C_Sharp_Learn/bl...
  • Вопрос задан
  • 84 просмотра
Решения вопроса 1
freeExec
@freeExec
Участник OpenStreetMap
Абстрактно и не понятно, но раз вы заговорили о шаблонах, то аналоги есть
var logic = Factory.Create<MyLogicClass>();
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы