设计模式6--Facade Pattern(门面模式、外观模式)

本文介绍了门面模式,包括其定义、动机(简化复杂系统中客户端与子系统交互)、代码实现(通过门面对象封装子系统操作),并分析了其优点(降低依赖、提高灵活性和安全性)以及缺点(不符合开闭原则)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、模式定义

门面模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。门面模式又称为外观模式,它是一种对象结构型模式。

二、模式动机

现代的软件系统都非常复杂,尽管我们已经想尽一切方法将其“分而治之”,把一个系统划分为好几个较小的子系统了,但是仍然可能会存在这样的问题:子系统内有非常多的类,客户端往往需要和许多对象打交道之后 才能完成想要完成的功能。

帮助我们用户(客户端)去更轻松的实现功能,不需要关心门面背后的细节。

从上图中我们可以看出门面模式一共有两种角色:

门面角色:客户端调用这个角色的方法。此角色知晓相关的子系统的功能和责任。正常情况下,本角色会将所有从客户端发来的请求委派到相应的子系统中去。

子系统角色:可以同时有一个或者多个子系统。每个子系统都不是一个单独的类,而是一个类的集合。每一个子系统都可以被客户端直接调用,或者被门面角色直接调用。子系统并不知道门面的存在,罪域子系统而言,门面仅仅是另一个客户端而已。

三、代码实现

子系统:

public class ClassA {
    public void doSomethingA(){
    //业务逻辑
    }
}
public class ClassB {
    public void doSomethingB(){
    //业务逻辑
    }
}
public class ClassC {
    public void doSomethingC(){
    //业务逻辑
    }
}


门面对象:

public class Facade {
    //被委托的对象
    private ClassA a = new ClassA();
    private ClassB b = new ClassB();
    private ClassC c = new ClassC();
    //提供给外部访问的方法
    public void methodA(){
        this.a.doSomethingA();
    }
    public void methodB(){
        this.b.doSomethingB();
    }
    public void methodC(){
        this.c.doSomethingC();
    }
}

四、门面模式的优点

  • 减少系统的相互依赖: 想想看,如果我们不使用门面模式,外界访问直接深入到子系统内部,相互之间是一种强耦合关系,你死我就死,你活我才能活,这样的强依赖是系统设计所不能接受的,门面模式的出现就很好地解决了该问题,所有的依赖都是对门面对象的依赖,与子系统无关。
  • 提高了灵活性:依赖减少了,灵活性自然提高了。不管子系统内部如何变化,只要不影响到门面对象,任你自由活动。
  • 提高安全性:想让你访问子系统的哪些业务就开通哪些逻辑,不在门面上开通的方法,你休想访问到。

五、门面模式的缺点


门面模式最大的缺点就是不符合开闭原则,对修改关闭,对扩展开放。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值