我问自己,Facade Pattern是否违反了SOLID原则,以及模式本身是否为反模式。
已更新
我的意见:
OCP ,因为您会向立面添加更多方法
LSP / ISP ,因为使用者/客户端具有依赖性太多的客户端不需要的依赖。
DIP ,在我看来,只要界面本身只暴露抽象或DTO,就不会违反。
SOLID 一般来说,我认为小,稳定,从而可组合接口。
facade 往往是相反的大和不稳定。
答案 0 :(得分:2)
一般而言,在不考虑任何实现细节的情况下,我们可以将 Facade 视为使用组合和封装。更高级别的 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();
}
}
在上面Bulb是一个子系统,Room是包装器(Facade)。因此,客户希望看到它直接点亮房间而不想知道灯泡必须做什么。
回到你的问题,如果我们逐一采用SOLID原则。
关于将Facade视为反模式(Facade),
使用Facade(许多模式)的选择仍然是个人风格。