開放 - 封閉原則的Wikipedia page(截至今天2013-02-27)表示它通過繼承來實現。立面是否利用開放原則?
名稱打開/關閉原則已被用於兩種方式。這兩種方式都使用繼承來解決明顯的困境,但目標,技術和結果是不同的。
「兩種方式」是指邁爾的實現繼承和更常見的多態擴展。
無論如何,我的問題是關於Façade模式,其中不是使用繼承。由於它定義了一個抽象形式的簡化接口到一個更復雜的子系統(或庫),這不能被視爲開放閉合原則嗎?更具體地:
副系統(或文庫)是對擴展開放到使用外牆,其接口是關閉變形例的客戶端。
或者我只是伸展信息隱藏的邊界(這是非常接近OCP,尤其是如果你認爲它爲Protected Variations)。
我不明白,「如果客戶對Facade的要求發生變化,Facade就會變更。戰略也會因此而中斷。 「如果任何Facade面向Facade關心的方向發生變化,那麼Facade也會如此。」 - 但是Facade的隱藏部分發生了變化。 [OCP ==類中的私有成員變量](https://www.cs.duke.edu/courses/fall07/cps108/papers/ocp.pdf#page=9)。 – Fuhrmanator 2016-02-14 20:14:43
我將Facade看作是一個不穩定(私人)子系統的穩定接口。至於必須有一個接口或抽象類,我不確定。 [JOptionPane](https://docs.oracle.com/javase/7/docs/api/javax/swing/JOptionPane.html)是我最喜歡Facade的例子。它不是一個抽象類/接口。它的公共部分不會很快改變(除了可能添加方法)。 – Fuhrmanator 2016-02-14 20:18:03
我想到了這一點,並沒有拿出任何話來解釋我的立場,我還沒有說過。如果我想到某件事,我會回來的。 – 2016-02-17 05:56:36