我问自己,Facade Pattern是否违反了SOLID原则,以及模式本身是否为Anti Pattern。
更新
我的意见:
一般而言,SOLID是关于小型,稳定且由此可组合的接口。
立面往往是相反的大而不稳定。
在没有考虑任何实现细节的一般想法中,我们可以将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(许多模式)的选择仍然是个人风格。