门面模式

老王的股票

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

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

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

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

(0)

相关推荐

  • Java设计模式-中介者模式

    https://www.shengchulai.com/blog-CiTs5E8tUf.htm 前言 小时候钟爱战争片,<地道战>.<鸡毛信>.<铁道游击队>一系列 ...

  • Java学习——114.交互线程

    线程在执行的过程中,有可能会需要共享资源或者交换数据,则称这一组线程为交互线程. 线程间的交互存在两种关系:竞争和协作. 竞争关系是指,两个线程同时使用同一个资源时,会产生竞争.此时,由于线程的并发执 ...

  • 设计模式-门面模式

    门面模式 参考资料 图解设计模式 大话设计模式 设计模式之禅 github我见过最好的设计模式 http://c.biancheng.net/view/1326.html 定义 也称为外观模式 外观模 ...

  • PHP设计模式之门面模式

    PHP设计模式之门面模式 门面模式,也叫外观模式.不管是门面还是外观,都是我们对外的媒介,就好像我们的脸面一样.所以,这个模式最大的特点就是要表现的"好看".怎么说呢?一堆复杂的对 ...

  • [PHP小课堂]PHP设计模式之门面模式

    [PHP小课堂]PHP设计模式之门面模式 关注公众号:[硬核项目经理]获取最新文章 添加微信/QQ好友:[DarkMatterZyCoder/149844827]免费得PHP.项目管理学习资料

  • 浅谈乡村治理模式发生了哪些变化?

    随着乡村现代化的发展,越来越多的乡村走上了建设数字乡村的道路,从传统的乡村治理到使用互联网数字化治理的模式,乡村的风貌和农民的生活也发生了巨大的变化,接下来就让我们一起来了解一下乡村治理模式到底发生了 ...

  • 【路衍经济】基于高速公路服务区发展路衍经济的经营方式与商业模式研究

    作者简介  陈楚宣:高级会计师.高级经济师,现任广东省交通集团有限公司副总会计师.战略发展部部长,广东粤运交通股份有限公司非执行董事.董事会审计及企业管治委员会成员.董事会薪酬委员会成员,广东省公路学 ...

  • 成功的乡村治理模式有这些特征

    乡村治理模式的构建与创新是乡村振兴的重要基础,相关农业农村问题专家建议,构建乡村治理新体系既要实现资源下沉,又要善于让各种治理机制发挥作用,把顶层设计和基层创新结合起来.接下来就和美丽乡村公司的小编一 ...

  • 广州市南沙区人社领导来访霖珑云科考察调研,共同探索灵活用工新模式

    4月8日,广州市南沙区人力资源和社会保障局副局长陈国红等领导一行莅临霖珑云科集团总部进行2021年企业灵活用工工作调研,并就企业灵活用工模式等内容开展座谈交流.霖珑云科董事长高萍.苏州工业园区劳动监察 ...

  • 乡村治理试点如何创新乡村治理模式?

    民族要复兴,乡村必振兴.乡村振兴既包括人才.产业.组织等多要素的全面推进,也离不开有效治理.文明乡风等多层面的多措并举.乡村治理不是一个新话题.但是,在新时代特别是"三农"工作重心 ...

  • 治疗师必须掌握,28块肌肉激痛点以及疼痛模式

    激痛点是一个高度易激惹点,为紧绷的骨骼肌筋膜内可触摸到的结节.直接的压力或肌肉收缩可诱发出Jump体征,局部疼痛,局部抽动以及牵涉痛.该牵涉痛通常以某种疼痛模式出现在激痛点的远处1,2,3,4. Ju ...