首页 > 其他分享 >设计模式 -- Facade(门面模式)

设计模式 -- Facade(门面模式)

时间:2022-10-09 14:11:06浏览次数:73  
标签:-- void 接口 耦合 Facade 设计模式 子系统

门面模式(Facade)

系统间耦合的复杂度
对于客户系统和子系统之前存在很多的耦合的情况,如果不考虑设计的情况,那么会形成A方案的情况,系统的依赖严重,维护性大大降低。

如果在客户层和子系统之间添加一层Facade,那么客户系统之和Facade打交道,子系统中也只和Facade打交道,那么在这时候,也就减少了客户和自系统的依赖程度,相对使两个系统更加独立,可维护提高。

动机
上述方案A的问题在于组件的客户和组件中的各种复杂的子系统有了过多的耦合,随着外部客户程序和子系统的演化,这种过多的耦合面临很多变化的挑战。
为子系统中的一组接口提供一个一致(稳定)的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用(复用)。

对于Facade来说其实没有固定的结构可循,很多时候看起来代码差别很大情况,但都是Facade模式。

而Facade更多的表达是一种设计原则和思想。
比如数据库的访问层(持久层的接口)就是一种典型的Facade模式。

代码

例如有一堆用户类、创建一个用户的门面类管理这些用户类的接口

// 用户类
interface UserHandle1 {
    void f1();
}
interface UserHandle2 {
    void f2();
}
interface UserHandle3 {
    void f3();
}

// 用户抽象工厂类、用于生成用于操作
interface UserHandleAbstractFactory {
    UserHandle1 createUserHandle1();
    UserHandle2 createUserHandle2();
    UserHandle3 createUserHandle3();
}

// 用户门面类
class UserFacade {
    public UserHandle1 handle1;
    public UserHandle2 handle2;
    public UserHandle3 handle3;

    public UserFacade(UserHandleAbstractFactory userHandleAbstractFactory) {
        handle1 = userHandleAbstractFactory.createUserHandle1();
        handle2 = userHandleAbstractFactory.createUserHandle2();
        handle3 = userHandleAbstractFactory.createUserHandle3();
    }

    void f1() {
        handle1.f1();
    }

    void f2() {
        handle2.f2();
    }

    void f3() {
        handle3.f3();
    }
}

要点总结

从客户程序角度来看,Facade模式简化了整个组建系统的接口,对于组建内部与外部客户程序来说,达到了一种“解耦”的效果——内部子系统的任何变化不会影响到Facade接口的变化。
Facade设计模式更注重从构架的层次去看整个系统,而不是单个类的层次,Facade很多时候更是一种架构设计的模式
Facade设计模式并非一个集装箱,可以任意的放入任何多个对象。Facade模式中组件的内部应该是“相互耦合关系比较大的一系列组件”,而不是简单的功能集合,以便能够实现松耦合,高内聚的特性。

标签:--,void,接口,耦合,Facade,设计模式,子系统
From: https://www.cnblogs.com/tie-dao/p/16771926.html

相关文章

  • FileBeat
     一个轻量级的日志收集的工具,消耗更少的cpu 和 内存。 我用我自己的话来描述,它究竟是用来干什么的:结合下边的图来看,fileBeat有两个组件,一个prospector,一个是harvester......
  • 在线问题反馈模块实战(一):梳理业务需求并创建数据库表
    ......
  • Ozone-适用于各种工作负载的灵活高效的存储系统
    ApacheOzone是一种分布式、可扩展和高性能的对象存储,可与Cloudera数据平台(CDP)一起使用,可以扩展到数十亿个不同大小的对象。它被设计为原生的对象存储,可提供极高的规模......
  • 物联网领域中,5G和边缘计算哪个性价比更高?
    随着数字化信息化的发展,对了更快更好的对设备进行管理,避免计划外的故障和事故,企业对于网速、延迟的要求越来越严格,很多相关的技术与产品逐渐被应用起来。其中5G技术和边缘计......
  • 使用回收站还原已删除的Active Directory对象
    在ActiveDirectory(AD)环境中,管理员不小心删除AD数据是很常见的。但是,影响取决于删除的对象类型。例如,如果您删除了单个用户的数据,则可能不会对组织产生重大影响。但是,如果您......
  • 可编程 USB 转串口适配器开发板 常见问题及注意事项
    可编程USB转串口适配器开发板常见问题及注意事项 可编程USB转UART/I2C/SMBusS/SPI/CAN/1-Wire适配器USB2S 常见问题及注意事项 (1)外接引线长度 当使用导线连接......
  • VS208~432型无线振弦采集仪远程修改参数方式
    无线采集仪支持远程无线修改设备参数功能,可通过短信指令、FTP文件、TCP在线指令三种途径实现。参数修改指令需要参数地址值,参数地址可由配置工具SETP获取,方法是点击......
  • 定时任务参数配置
    QuartZCron表达式解析:Cron表达式由7个部分组成,每个部分使用空格隔开。表达式中的七个部分从左到右代表的含义如下:秒分时日(每月中的一天)月日(每周中的一天)年 具体参......
  • 之乎者也
    知之为知之在乎不在乎此人何其者孔老夫子也知之为不知在在不在乎此人何其者寒山子是也不知为知之不在乎在乎此人何其者齐人是也很久以前我们的祖先都曾经这么......
  • String、StringBuffer 、StringBuilder、StringJoiner
    一、String、StringBuffer、StringBuilder1、定义用来连接多个字符的,本质就是一个char型的数组,是一种引用类型,并且不能被继承因为是final修饰的Stringstr="abc";相当......