zoukankan      html  css  js  c++  java
  • 结构型之门面模式

    序言

      门面模式是对象的结构模式,外部与一个子系统的通信必须通过一个统一的门面对象进行,避免了客户端与子系统内部的很多对象打交道。
      家作为1个子系统,内部有灯,厨房,卧室,主人每次忙起来的时候,都要和他们打交道,为了方便,主人雇了一个保姆(门面)专门做这些事情,对于什么时候做饭,做什么饭,每次都要由主人吩咐保姆。

    门面模式

      门面模式的结构如下图:

    ![](http://images2017.cnblogs.com/blog/946528/201708/946528-20170817114734053-620021069.png)
    ``` /** * 内部子系统-灯 */ public class Light {
    public void turnOn(){
        System.out.println("开灯");
    }
    

    }

    /**

    • 内部子系统-厨房
      */
      public class Kitchen {

      public void cook(){
      System.out.println("做饭");
      }
      }

    /**

    • 内部子系统-房间
      */
      public class Room {

      public void sweep(){

       System.out.println("清理房间");
      

      }
      }

    /**

    • 保姆门面角色.只暴露内部子系统的cook方法,trunOn和sweep没有暴露,
      */
      public class NurseFacade {

      private Kitchen kitchen = new Kitchen();
      public void work(){
      new Light().turnOn();
      new Room().sweep();
      }
      //将需要暴露接口的暴露,不需要暴露的封装在内部接口中
      public void cook(){
      kitchen.cook();
      }
      }

    /**

    • 测试门面模式
      */
      public class FacadeTest {
      @Test
      public void testFacade(){
      new NurseFacade().work();
      new NurseFacade().cook();
      }
      }
    >吹牛:
    >1. <span style="color:red">门面模式松散了客户端与子系统的耦合关系,客户端不再需要了解子系统内部的实现,也不需要跟众多子系统内部的模块进行交互,只需要跟门面类交互就可以了。</span>
    >2. <span style="color:red">通过合理使用Facade,可以帮助我们更好地划分访问的层次。有些方法是对系统外的,有些方法是系统内部使用的。把需要暴露给外部的功能集中到门面中,这样既方便客户端使用,也很好地隐藏了内部的细节。</span>
    
    ### 后记
    >- 撰写本文考了不少博文,在此一并谢过。
    [《JAVA与模式》之门面模式](http://www.cnblogs.com/java-my-life/archive/2012/05/02/2478101.html)
    >- 转载时,请注明出处,这是人格的一种体现。
    [https://www.zybuluo.com/BertLee/note/853031](https://www.zybuluo.com/BertLee/note/853031)
    >- 能力有限,如有纰漏,请在评论区指出,老朽虽一把年纪,必当感激涕零,泪如雨下。
  • 相关阅读:
    call()与apply()的作用与区别
    Tomcat8/9的catalina.out中文乱码问题解决
    怎样查看Jenkins的版本
    每日日报2020.8.18
    528. Random Pick with Weight
    875. Koko Eating Bananas
    721. Accounts Merge
    515. Find Largest Value in Each Tree Row
    286. Walls and Gates (Solution 1)
    408. Valid Word Abbreviation
  • 原文地址:https://www.cnblogs.com/codebug/p/7380815.html
Copyright © 2011-2022 走看看