zoukankan      html  css  js  c++  java
  • 门面模式

    老王的股票

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

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

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

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

  • 相关阅读:
    在C#代码中应用Log4Net(二)典型的使用方式
    在C#代码中应用Log4Net(一)简单使用Log4Net
    Windows Azure Active Directory (2) Windows Azure AD基础
    Windows Azure Virtual Network (6) 设置Azure Virtual Machine固定公网IP (Virtual IP Address, VIP) (1)
    Windows Azure Active Directory (1) 前言
    Azure China (6) SAP 应用在华登陆 Windows Azure 公有云
    Microsoft Azure News(3) Azure新的基本实例上线 (Basic Virtual Machine)
    Microsoft Azure News(2) 在Microsoft Azure上运行SAP应用程序
    Microsoft Azure News(1) 新的数据中心Japan East, Japan West and Brazil South
    Windows Azure HandBook (2) Azure China提供的服务
  • 原文地址:https://www.cnblogs.com/fengyumeng/p/10812964.html
Copyright © 2011-2022 走看看