小侃设计模式(十)-外观模式

外观模式是一种结构型设计模式,它提供了一个统一的接口,用于客户端与子系统的交互,降低了复杂性。外观角色协调多个子系统,客户端只需与外观对象交互。这种模式提高了系统的可维护性和扩展性,适用于分层架构。案例中展示了如何创建和使用外观模式,强调了其在简化客户端调用和解耦系统组件上的作用。
摘要由CSDN通过智能技术生成

1.概述

外观模式(Facade Pattern)为子系统中的接口提供了一个统一接口,用来访问子系统中的一组接口,这个模式定义了一个高层接口,该接口使得客户端调用系统更加地方便。外观模式主要通过定义一个接口,屏蔽内部子系统的细节,使得调用端只和这个接口发生调用,而无须关系系统的内部细节。外观模式是结构型模式的一种,本文将分析外观模式的原理及使用方式。

2.原理及使用

2.1 原理

外观模式又叫门面模式,它的类图主要如下所示:
在这里插入图片描述
它的主要角色包括:

1.抽象接口(FacadeInterface):该接口是抽象的一个高层接口,规范了对外的调用方法;
2.外观角色(Facade):该类是抽象接口(FacadeInterface)的具体实现,内部实现了对子系统的具体调用,客户端可以调用这个角色的方法来完成对子系统内一组功能的操作;
3.子系统角色(SubSystem):每一个子系统都是一个单独的类,也可以是一个类的集合,实现了子系统具体的功能,每一个子系统都可以直接被客户端调用,也可以被外观角色直接调用,外观角色对于子系统来说就是一个客户端。

注意:在JAVA语言中,FacaeInterface这个接口其实并不是必须的,对于不同的客户端,可能需求也是不同,无法提供统一的接口对所有的客户端,客户端真正关系的还是所调用的外观角色(Facade),因此上述类图可以直接进行缩减成如下模式:

在这里插入图片描述

2.2 案例

针对上述类图的代码如下:

public class Facade
{
    private SubSystemA subSystemA = new SubSystemA();
    private SubSystemB subSystemB = new SubSystemB();
    private SubSystemC subSystemC = new SubSystemC();

    public void method()
    {
        subSystemA.method();
        subSystemB.method();
        subSystemC.method();
    }
}

public class SubSystemA
{
    public void method()
    {
        System.out.println("子系统A");
    }
}

public class SubSystemB
{
    public void method()
    {
        System.out.println("子系统B");
    }
}

public class SubSystemC
{
    public void method()
    {
        System.out.println("子系统C");
    }
}

//测试代码如下
public class Test {

    public static void main(String[] args) {
		Facade facade = new Facade();
        facade.method();
    }
}

3.小结

1.外观模式对外展蔽了子系统的细节,因此外观模式降低了客户端对子系统使用的复杂性;
2.外观模式对客户端与子系统的耦合关系,让子系统内部的模块更易维护和扩展,通过合理的使用外观模式,可以帮我们更好的划分访问的层次;
3.当系统需要进行分层设计时,可以考虑使用Facade模式;
4.不能过多的或者不合理的使用外观模式,需要根据场景选择使用外观模式,不应为了使用模式而使用,大道至简;
5.外观模式是相对简单的一种设计模式。

4.参考文献

1.《设计模式-可复用面向对象软件的基础》-Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides
2.《可复用物联网Web3D框架的设计与实现》-程亮(知网)
3.https://www.bilibili.com/video/BV1G4411c7N4-尚硅谷设计模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值