Wikipedia page (на сегодняшний день 2013-02-27) для открытого принципа гласит, что он реализуется через наследование.Использует ли Façade принцип Open-Closed?
Название Открытый/Закрытый принцип использовался двумя способами. Оба способа используют наследование для разрешения кажущейся дилеммы, но цели, методы и результаты различны.
«Два пути» относится к наследованию реализации Мейера и более распространенным полиморфным расширениям.
Во всяком случае, мой вопрос касается картины Façade, которая делает не использование наследования. Поскольку он определяет абстракцию в виде упрощенного интерфейса к более сложной подсистеме (или библиотеке), разве это нельзя рассматривать также как принцип открытого закрытия? Более конкретно:
Подсистема (или библиотека) является открыт для расширения к клиенту, который использует фасад, чей интерфейс закрыт для модификации.
Или я просто растягиваю границы скрытия информации (что очень близко к OCP, особенно если вы считаете это Protected Variations).
Я не понимаю, 'Если требования клиента к изменению фасада, так же как и Фасад. 'Клиент * закрыт для модификации *; Стратегия тоже сломается. 'Если какой-либо из классов, что Фасад фасадов для изменения в пути, что Фасад заботится, так будет и Фасад.', но скрытая часть Фасад меняется. [OCP == переменные-члены private в классе] (https://www.cs.duke.edu/courses/fall07/cps108/papers/ocp.pdf#page=9). – Fuhrmanator
Я вижу Фасад как устойчивый интерфейс к нестабильной (частной) подсистеме. Что касается наличия интерфейса или абстрактного класса, я не уверен. [JOptionPane] (https://docs.oracle.com/javase/7/docs/api/javax/swing/JOptionPane.html) - мой любимый пример фасад. Это не абстрактный класс/интерфейс. Его публичная часть не изменится в ближайшее время (за исключением, возможно, добавления методов). – Fuhrmanator
Я подумал об этом немного и не придумал никаких слов, чтобы объяснить свою позицию, о которой я еще не сказал. Я вернусь, если что-нибудь придумаю. –