Roo*_*ian 8 design-patterns facade solid-principles
我问自己,外观模式是否违反了 SOLID 原则,以及模式本身是否是反模式。
更新
我的意见:
违反了OCP,因为你会在facade中添加更多的方法
LSP / ISP被违反,因为消费者/客户端有依赖,会有太多客户端不需要的方法。
DIP,在我看来,只要接口本身只公开抽象或 DTO,就不会被违反。
SOLID一般是我约的意见小,稳定,从而组合的接口。
一个门面往往是相反的大和不稳定。
一般来说,不考虑任何实现细节,我们可以将Facade视为一种使用Composition 和 Encapsulation隐藏具有更高级别包装类的子系统的方法。更高级别的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();
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的 Bulb 是一个子系统,而 Room 是包装器(Facade)。因此,客户希望看到它直接照亮了房间,而对知道必须用灯泡做什么不感兴趣。
所以回到你的问题,如果我们一一采用 SOLID 原则。
关于将 Facade 视为一种反模式(Facade 的缺点),
仍然选择使用 Facade(Many patterns) 将取决于个人风格。
| 归档时间: |
|
| 查看次数: |
3362 次 |
| 最近记录: |