概念
外观模式对外隐藏了系统的复杂性,向客户端提供了统一的访问接口,使得系统更易于被使用。
- 门面(Facade Class):客户端调用门面类方法。门面类了解一个或多个子系统的功能和责任,将请求委派到相应的子系统去。
- 子系统(SubSystem Classes):每个子系统都不是一个单独的类,可以是一个类、一个功能模块或者一个完整的系统。子系统并不知道门面的存在,对于子系统而言,门面仅仅是一个客户端而已。
例子
通过买基金的例子实现门面模式。我们知道,直接购买股票风险大,很多人会选择购买基金,其实在基金业务的背后,也是对股票买卖进行了整合,而这些操作这些对客户来说都是透明的。
Stock:股票买入卖出
public class Stock1 {
public void buy(){
System.out.println("stock1买入");
}
public void sell(){
System.out.println("stock1卖出");
}
}
public class Stock2 {
public void buy(){
System.out.println("stock2买入");
}
public void sell(){
System.out.println("stock2卖出");
}
}
public class Stock3 {
public void buy(){
System.out.println("stock3买入");
}
public void sell(){
System.out.println("stock3卖出");
}
}
Fund(基金):
public class Fund {
private Stock1 stock1 = new Stock1();
private Stock2 stock2 = new Stock2();
private Stock3 stock3 = new Stock3();
public void buy(){
stock1.buy();
stock2.buy();
stock3.buy();
}
public void sell(){
stock1.sell();
stock3.sell();
}
}
Client(客户端):
public class Client {
public static void main(String[] args) {
Fund fund = new Fund();
fund.buy();
fund.sell();
}
}
优点:
- 降低了对子系统的耦合
- 隐藏子系统细节,提升了安全性
缺点:
不符合开闭原则,对修改关闭,对扩展开放。