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

 

外观模式 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得子系统更容易使用。
 
例子:
 
假如我现在要买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();
}

 

总结:

外观模式本质就是加一层,用来封装复杂的功能,提供一个统一的入口,使得调用方无须知道细节逻辑
 
代理模式和外观模式的的区别
代理模式强调的是一对一,一个代理类代理一个类
外观模式强调的是一对多,一个外观类对应多个类

 

posted @ 2021-12-06 17:18  知识海洋中的浮萍  阅读(54)  评论(0)    收藏  举报