门面模式

博客以作者与老王的交流引入,讲述老王炒股票需逐个操作,而作者推荐余额宝,称其有专业团队操作资金,只需存钱收钱。进而引出门面模式,它为子系统接口提供一致界面,余额宝就是门面,封装股票操作逻辑,减少内外系统依赖。

老王的股票

  大家好,我是小赵,目前任职藏剑山庄高级铸剑师,在山庄里和我玩的比较好的有老王和老刘他们几个,都是组长级别的二货们,经常混在一起打牌。

  今天上午闲得蛋疼晃悠晃悠的晃到的老王的地盘,看到老王在埋头写程序:

    public static void main(String[] args) {
        Stock1 stock1 = new Stock1();
        stock1.buy();

        Stock2 stock2 = new Stock2();
        stock2.sell();

        Stock3 stock3 = new Stock3();
        stock3.buy();

        //省略八百行差不多的代码.....
    }

  这老王似乎在炒股票,好专业的样子。

  于是我伸手拍了拍老王的肩膀:“干啥呢?”。

  老王一下子打了个哆嗦,回头看到是我,才松了一口气,说道:“搞毛线,今天的情况有点复杂,我这些股票感觉要死一大片,得抓紧时间调整战术”。

 

  我仔细看了一下老王的程序:

股票1:

public class Stock1 {
    public void sell(){
        System.out.println("卖出股票1");
    }
    public void buy(){
        System.out.println("买入股票1");
    }
}

股票2:

public class Stock2 {
    public void sell(){
        System.out.println("卖出股票2");
    }
    public void buy(){
        System.out.println("买入股票2");
    }
}

股票3:

public class Stock3 {
    public void sell(){
        System.out.println("卖出股票3");
    }
    public void buy(){
        System.out.println("买入股票3");
    }
}

省略其他股票。。。。。

 

  看到这里,我脑海中立刻浮现出一张缩略图:

  “我草!,老王,你牛逼啊,这么多股票,你一个一个操作,得搞死多少脑细胞啊?小心精尽人亡。”

  “老赵,你有好办法?”

 

马爸爸的余额宝

  下班后,老王来我家里取经,我给他看了个产品,余额宝:

public class YuEBao {
    public void in(){
        System.out.println("存钱");
    }

    public void select(){
        System.out.println("查询余额");
    }

    public void out(){
        System.out.println("取钱");
    }

    private void execute(){
        Stock1 stock1 = new Stock1();
        stock1.buy();

        Stock2 stock2 = new Stock2();
        stock2.sell();

        Stock3 stock3 = new Stock3();
        stock3.buy();
    }
}

  “老赵,你这玩意儿怎么用?”

  “这个叫余额宝,我只需要往里存钱,然后就每天收钱就行,啥都不需要管,至于操作各种股票的execute方法由余额宝自己去搞,人家有一批专业的投资专家团队帮你操作资金”

  “这样我就不用自己去直接操作几十只股票了?”

  “是的,只是如果赚的话可能没你自己操作赚的多,但是非常稳定。市场上还有很多基金也是一样的道理,都是封装了各种股票操作的细节,只给我们提供最简单的投入、取现等大众化接口。”

用图来表达就是这样子:

门面模式

  门面模式(Facade Pattern),也叫做外观模式,为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

  余额宝这个类,其实就是一个门面 Facade,它封装了子系统操作各种股票的逻辑,减少了外部系统与内部系统的依赖,使得所有依赖都是针对门面对象,无论子系统中的股票如何变化,都不影响到外部系统。

 

  当然,如果代码表现出的门面模式引起了你的争议,那么你也可以这么写:

public class YuEBao {
    public void stock1Buy(){
        Stock1 stock1 = new Stock1();
        stock1.buy();
    }
    public void stock1Sell(){
        Stock1 stock1 = new Stock1();
        stock1.sell();
    }
    public void stock2Buy(){
        Stock2 stock2 = new Stock2();
        stock2.buy();
    }
    public void stock1Sel2(){
        Stock2 stock2 = new Stock2();
        stock2.sell();
    }
    public void stock3Buy(){
        Stock3 stock3 = new Stock3();
        stock3.buy();
    }
    public void stock1Sel3(){
        Stock3 stock3 = new Stock3();
        stock3.sell();
    }
}

  门面模式是一种常用的封装方式,可能大家在开发中会经常使用到,实际上,门面对象中并没有什么实际的业务逻辑,它只是一个委托类。

转载于:https://www.cnblogs.com/fengyumeng/p/10812964.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值