В общих идеях без учета каких-либо особенностей реализации, мы можем рассмотреть Фасад как способ сокрытия набора подсистем с более высоким классом уровня обертки с использованием Состава и инкапсуляции. Более высокий уровень Wrapper класс - это тот, который всегда разговаривает с любым клиентом, а Подсистемы, состоящие внутри оболочки, являются теми, которые действительно выполняют задания.
Пример:
public class Bulb{
public void on(){
//logic to turn on the bulb.
}
}
public class Room{
private Bulb bulb;
public void lightUp(){
this.bulb.on();
}
}
В выше Лампа накаливания является суб-система и номеров обертка (Фасад). Таким образом, клиент хотел бы видеть, поскольку он непосредственно освещает комнату и не интересуется тем, что нужно делать с лампочкой.
Итак, вернитесь к своему вопросу, если мы возьмем СОЛИДНЫЕ принципы один за другим.
- SRP: Вы должны думать, что класс обертки нарушает этот принцип, потому что он выполняет больше, чем один долг. Но, с другой стороны, он просто призывает некоторых других сделать их, а не выполнять реализацию с помощью обертки. В любом случае эта мысль может быть очень личной.
- OCP: Определенно да, если вы добавляете еще несколько подсистем/функций.Тем временем вы можете использовать некоторые современные рамки привязки к реализации, чтобы избежать нарушения OCP в этой ситуации.
- LSP: В общем, я не нашел. Но могут быть ситуации, специфичные для реализации, а не шаблон.
- ISP: То же, что и LSP.
- DIP: То же, что и LSP, ISP.
И о рассмотрении Фасад как анти-шаблон (Cons фасада),
- Можно видеть, это увеличивает затраты на техническое обслуживание. Для некоторых изменений вам необходимо изменить реализацию подсистем (ы) + соответствующие вызовы обертки.
- Подсистемы плотно соединены с Wrapper.
- Это какой-то процедурный и немного от объектной ориентации.
Все еще выбор использования фасада (многие образцы) был бы индивидуальным вкусом.
Вы имеете в виду все SOLID принципы ?? или какой-то конкретной? –
Я бы сказал, SRP, Liskovk и интерфейс сегрегации. – Rookian
В общем, я сам вижу нарушение OCP. И вы можете отнестись к классу Facade, как к нарушению SRP. Остальная часть вашего вопроса может быть в значительной степени специфичной для реализации. Не могли бы вы, например, рассказать, где это нарушает эти принципы? или ссылку определенной реализации, которую вы нашли? –