设计模式-外观模式(门面模式)

外观模式 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得子系统更容易使用。
例子:
假如我现在要买3支股票,等收益了在卖出,那么现在是这样的
1.定义三只股票
//股票1 class shares1{ public void buy1(){ System.out.println("股票1买入"); }; public void sell1(){ System.out.println("股票1卖出"); }; } //股票2 class shares2{ public void buy2(){ System.out.println("股票2买入"); }; public void sell2(){ System.out.println("股票2卖出"); }; } //股票3 class shares3{ public void buy3(){ System.out.println("股票3买入"); }; public void sell3(){ System.out.println("股票3卖出"); }; }
2.操作买入和卖出
public static void main(String[] args) { shares1 shares1 = new shares1(); shares2 shares2 = new shares2(); shares3 shares3 = new shares3(); shares1.buy1(); shares2.buy2(); shares3.buy3(); shares1.sell1(); shares2.sell2(); shares3.sell3(); }
但是这样太麻烦了,使用了外观模式之后 就相当于是买了基金,我不需要甚至是不知道有股票的存在,操作基金的买入卖出即可。其实就是加了一层而已。
增加基金,用基金来操作股票,股票的三个类不变
//基金 class Fund { private Shares1 shares1; private Shares2 shares2; private Shares3 shares3; public Fund(Shares1 shares1, Shares2 shares2, Shares3 shares3) { this.shares1 = shares1; this.shares2 = shares2; this.shares3 = shares3; } public void buy(){ shares1.buy1(); shares2.buy2(); shares3.buy3(); } public void sell(){ shares1.sell1(); shares2.sell2(); shares3.sell3(); } }
买卖改为买卖基金
public static void main(String[] args) { Fund fund = new Fund(new Shares1(), new Shares2(), new Shares3()); fund.buy(); fund.sell(); }
总结:
外观模式本质就是加一层,用来封装复杂的功能,提供一个统一的入口,使得调用方无须知道细节逻辑
代理模式和外观模式的的区别
代理模式强调的是一对一,一个代理类代理一个类
外观模式强调的是一对多,一个外观类对应多个类
浙公网安备 33010602011771号