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

    门面模式:Facade Pattern, FP

      又叫外观模式,提供了一个统一的接口,用来访问子系统中的一群接口

      特征:定义一个高层接口,让子系统更容易使用

      属于结构型模式

      日常编码中,有意无意的大量使用了门面模式,但凡只要高层模块需要调度多个子系统(2个以上类对象),我们都会自觉的创建一个新类封装这些子系统,提供精简接口,让高层模块可以更加容易的间接调用这些子系统的功能。

      尤其是现阶段各种第三方 SDK, 各种开源类库,很大概率都会使用门面模式

    应用场景:

      子系统越来越复杂,增加门面模式提供简单接口

      构建多层系统结构,利用门面对象作为每层的入口,简化层间调用


    门面模式主要包含2种角色:

      外观角色:(Facade)也称 门面角色,系统对外的统一接口

      子系统角色:(SubSystem)可以同时有一个或多个 SubSystem,每个SubSystem都不是一个单独的类,而是一个类的集合。

        SubSystem 并不知道 Facade 的存在,对 SubSystem 而言,Facade 只是另一个客户端

      通用写法:
        pattern.facade.general


    业务实例:

      Gper社区新增上线一个积分兑换礼品的商城

      面向对接各个子系统,可能涉及到 积分系统、支付系统、物流系统的接口调用

      如果全部由前端发送网络请求现有接口:
        1、增加前端开发的难度

        2、增加一些网络请求影响页面性能

        发挥门面模式的优势,将现有的接口整合到一个类中,由后端提供统一的接口给前端调用
        pattern.facade.points


    源码中的体现:

      Spring: JDBC模块下的 JdbcUtils 类

      MyBatis:Configuration 类

      Tomcat: RequestFacade 类、ResponseFacade 类、StandardSessionFacade 类

    门面模式与代理模式
      门面模式就是特殊的静态代理模式

      门面模式:重点是在于封装
      静态代理:重点是在于增强

      不做增强的静态代理就是门面模式
      (以后会讲委派模式,也是一种静态代理)

    代理:结构型模式
    委派:行为型模式,不属于 GOF 23 ?

    门面模式与单例模式
      门面模式做成单例,比如:工具包
      static就是单例,只不过内存放在代码块中,不是存在堆内存,


    优点:
      简化调用过程,无需深入了解子系统x具体实现,以防给子系统带来风险

      减少系统依赖、松散耦合

      更好地划分访问层次,提高了安全性

      遵循迪米特法则(最少知道原则)

    缺点:
      当增加子系统和扩展子系统行为时,可能容易带来未知风险

      不符合开闭原则

      某些情况下可能违背了单一职责原则


    作业:

      1、请举例3-5个使用门面模式的应用场景。

      /homework/tasks/7e7e7f7ff7g5egc4g6agf0

  • 相关阅读:
    文本框textarea根据输入内容自适应高度 和输入中文和数字换行解决方法
    switch 和 if...else if 的区别
    vue中 eCharts 自适应容器
    AJAX跨域POST发送json时,会先发送一个OPTIONS预请求
    获取鼠标和元素的坐标点
    vue2 数据交互 vue-resource
    网站代码初始化
    vue2 关于ref
    事件监听
    cookie 的 写入,读取, 删除
  • 原文地址:https://www.cnblogs.com/fightingtong/p/13024135.html
Copyright © 2011-2022 走看看