• 门面模式


    老王的股票

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

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

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

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

  • 相关阅读:
    ranorex
    vue.js
    逻辑思维
    laravel-luntan
    python学习--基础
    git
    Laravel-高级篇-Auth-数据迁移-数据填充
    Laravel-高级篇-Artisan
    Laravel-表单篇-零散信息
    Laravel-表单篇-controller
  • 原文地址:https://www.cnblogs.com/fengyumeng/p/10812964.html
Copyright © 2020-2023  润新知