开放 - 封闭原则的Wikipedia page(截至今日2013-02-27)表明它是通过继承实现的。
名称Open / Closed Principle有两种使用方式。两种方式都使用继承来解决明显的困境,但目标,技术和结果是不同的。
“两种方式”是指迈耶的实现继承和更常见的多态扩展。
无论如何,我的问题是关于Façade模式,不使用继承。由于它以简化的接口形式定义抽象,以更复杂的子系统(或库),这不能被视为开放封闭原则吗?更具体地说:
子系统(或库)打开以进行扩展到使用Façade的客户端,其界面关闭以进行修改。
或者我只是扩展了信息隐藏的界限(这与OCP非常接近,特别是如果你认为它是Protected Variations)。
答案 0 :(得分:1)
不,Facade模式解决了与OCP不同的问题。 Facade只是一个其他课程的课程。 Facade将其客户与其所要求的类别进行隔离,但这不是OCP。 OCP是关于各个类如何根据需求的变化而变化的。没有关于Facade的任何内容来设置这些更改。如果客户对Facade的要求发生变化,Facade也会发生变化。如果Facade所面临的任何课程都以Facade关心的方式改变,那么Facade也会如此。
可以想象一个Facade版本被设置为遵循OCP - 也许是一个Facade,其客户端的接口是一个接口或抽象类,它被关闭以进行修改但可以扩展以适应新的需求 - 事实上我总是以这种方式实现Facades,但这不是Facade经典描述的一部分。