JAVA设计模式-外观模式

概念

外观模式对外隐藏了系统的复杂性,向客户端提供了统一的访问接口,使得系统更易于被使用。

  • 门面(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();
    }
}

优点:

  • 降低了对子系统的耦合
  • 隐藏子系统细节,提升了安全性

缺点:

不符合开闭原则,对修改关闭,对扩展开放。

猜你喜欢

转载自blog.csdn.net/ghaohao/article/details/79893751