外观模式(Facade Pattern)

外观模式定义:为子系统中的一组接口提供一个一致的界面

此模式定义了一个高层接口,该接口使得这一子系统更加容易使用


public class Stock {

    public void buy(){
        System.out.println("购买股票");
    }

    public void sell(){
        System.out.println("抛售股票");
    }
}
public class Currency {

    public void buy(){
        System.out.println("购买货币");
    }

    public void sell(){
        System.out.println("抛售货币");
    }
}
public class Person {

    public void invest(){
        Stock apple = new Stock();
        Stock google = new Stock();
        Stock facebook = new Stock();
        Currency rmb = new Currency();
        Currency dollar = new Currency();

        apple.buy();
        google.buy();
        facebook.buy();
        rmb.buy();
        dollar.buy();
    }

    public void disinvest(){
        Stock apple = new Stock();
        Stock google = new Stock();
        Stock facebook = new Stock();
        Currency rmb = new Currency();
        Currency dollar = new Currency();

        apple.sell();
        google.sell();
        facebook.sell();
        rmb.sell();
        dollar.sell();
    }
}

站在Person的角度思考其实不关心投资的具体细节,关注的是投资这个动作,如此一来,我们应该考虑封装具体实现细节,对外提供统一的方法进行调用,这样将使接口调用方和复杂的实现解耦


public class Invest {
    private Stock apple;
    private Stock google;
    private Stock facebook;
    private Currency rmb;
    private Currency dollar;

    public Invest(){
        apple = new Stock();
        google = new Stock();
        facebook = new Stock();
        rmb = new Currency();
        dollar = new Currency();
    }

    public void buy(){
        apple.buy();
        google.buy();
        facebook.buy();
        rmb.buy();
        dollar.buy();

        System.out.println("购买股票");
    }

    public void sell(){
        apple.sell();
        google.sell();
        facebook.sell();
        rmb.sell();
        dollar.sell();

        System.out.println("抛售股票");
    }
}
public class Person {

    public void invest(){
        Invest invest = new Invest();
        invest.buy();
    }

    public void disinvest(){
        Invest invest = new Invest();
        invest.sell();
    }
}

特别要注意的是,外观模式并没有封装子系统(封装的是业务业务流程,对外提供统一接口),如果需要,依然可以直接调用子系统中的类,但是既然已经进行了封装,最好不要直接调用

对于简单的流程,使用外观模式会提高带码的复杂度,得不偿失

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值