2

开闭原则的维基百科页面(截至今天 2013-02-27)说它是通过继承实现的。

开放/封闭原则这个名称有两种使用方式。两种方式都使用继承来解决明显的困境,但目标、技术和结果是不同的。

“两种方式”是指 Meyer 的实现继承和更常见的多态扩展。

无论如何,我的问题是关于使用继承的外观模式。既然它以简化接口的形式定义了一个对更复杂的子系统(或库)的抽象,难道这也不能被看作是开闭原则吗?进一步来说:

子系统(或库)是开放的,可扩展至使用 Façade 的客户端,其接口对修改是封闭的

还是我只是在扩展信息隐藏的界限(这非常接近 OCP,特别是如果您将其视为Protected Variations)。

4

1 回答 1

1

不,Facade 模式解决了与 OCP 不同的问题。Facade 只是一个类,它是一些其他类的前面。Facade 将它的客户与它所面对的类的变化隔离开来,但这不是 OCP。OCP 是关于单个类如何响应需求变化而变化的。没有任何关于 Facade 的设置来引导这些更改。如果客户对立面的要求发生变化,立面也会发生变化。如果 Facade 面向的任何类以 Facade 关心的方式发生变化,Facade 也会如此。

可以想象一个按照 OCP 设置的 Facade 版本——也许是一个 Facade,其与客户端的接口是一个接口或抽象类,它对修改是封闭的,但可以扩展以适应新的需求——事实上我已经总是以这种方式实现 Facade,但这不是 Facade 的经典描述的一部分。

于 2016-02-14T04:13:22.457 回答