Должен ли я использовать дизайн стратегии или шаблон адаптера?
Это классическая ошибка, которую совершают все при разработке приложения (включая меня). В в идеале не следует просматривать список доступных шаблонов проектирования и выбирать тот, который лучше всего соответствует вашей задаче. Вместо этого вы должны придумать первоначальный дизайн класса, а затем попытаться определить шаблон, который лучше всего описывает ваш дизайн. Это убережет вас от чрезмерного проектирования, т. е. от создания ненужных компонентов, которые в противном случае вам не понадобятся. Со временем у вас скоро будет словарь шаблонов проектирования, которые вы фактически использовали, а не приложение, которое пытается использовать конкретный шаблон проектирования.
Оставляя шаблоны проектирования в стороне, похоже, что вы ищете способ предоставить общий интерфейс для выполнения одной и той же функциональности с использованием разных базовых библиотек/подходов. Это очень похоже на абстракцию и делегирование.
Вы можете добиться абстракции, определив общий интерфейс с именем Provider со стандартными методами операций, такими как shutdown
, connect
, retry
и т. д. Затем вы можете создать один конкретный класс провайдера для каждого типа провайдера, такого как AWSProvider
и LinodeProvider
, и реализовать методы shutdown
, connect
и retry
. Затем вы используете Делегирование, вызывая специфичные для провайдера API внутри этих методов. Например, вызовите метод powerOff
внутри метода shutdown
класса LinodeProvider
.
Если вы теперь внимательно посмотрите на свой дизайн, вы начнете понимать, что он похож на шаблон Strategy, а также на шаблон Adpter. Что отличает эти два шаблона, так это момент времени, когда в игру вступает Абстракция. Если вы решили использовать реализацию Provider через Factory во время выполнения приложения, вы используете шаблон Strategy; однако, если это решение принимается во время компиляции, вы используете шаблон Adapter. Если не считать названия шаблона, ваши классы будут выглядеть практически одинаково.
Преимущество этого подхода заключается в том, что вы не только определили правильный шаблон, но и защитили себя от перепроектирования приложения, используя такие шаблоны, как шаблон Command.
person
CKing
schedule
10.01.2017