结构型设计模式(四) 之 API的封装请用外观模式

1 定义

外观模式(Facade Pattern)又叫门面模式,属于结构型设计模式之一。它主要用于当存在多个复杂的子系统需要调用时,通过引用一个外观角色进行组合性封装来简化对外调用的入口,降低子系统与调用者的耦合度和降低调用者使用成本,一般常用于对SDK或者API的封装。例如实现场景中,我们使用一些电脑优化工具软件进行优化时,软件一般提供了:垃圾清理、病毒查杀、注册表清理、大文件查找等功能,而一般也会直接提供了一个充当外观角色的一键优化入口,当我们触发一键优化时,工具便会自动帮我们执行内部相应的子功能进行电脑的优化。

2 实现

外观模式一般包含了2个角色,分别是:

  1. 子系统(SubSystem),可以有一个或者多个子系统,也就是多个子功能,每个子系统受外观类指派的任务。例如上述定义举例的垃圾清理、病毒查杀、注册表清理子功能。
  2. 外观(Facade),将子系统进行封装来提供对调用者统一简单的调用入口,当调用者执行请求时会委派相应的子系统去完成相关逻辑。例如上述定义举例的一键优化。

子系统类,可以存在一个或多个,可以是同一个类也可以是不同的类:

public class Disk {
    public static void cleanRubbish() {
        System.out.println("清理垃圾");
    }

    public static void findBigFile() {
        System.out.println("查找大文件");
    }
}
public class Regedit {
    public static void clean() {
        System.out.println("清理注册表");
    }
}
public class Virus {
    public static void kill() {
        System.out.println("查杀病毒");
    }
}

外观类,它整合了两个入口,分别是:一键优化和系统瘦身:

public class Integration {
    public static void onKeyOptimization() {
        System.out.println("一键优化,执行了:");
        Disk.cleanRubbish();
        Regedit.clean();
        Virus.kill();
    }
    public static void systemSlim() {
        System.out.println("系统瘦身,执行了:");
        Disk.cleanRubbish();
        Disk.findBigFile();
        Regedit.clean();
    }
}

客户端:

Integration.onKeyOptimization();
Integration.systemSlim();

输出结果:

一键优化,执行了:
清理垃圾
清理注册表
查杀病毒

系统瘦身,执行了:
清理垃圾
查找大文件
清理注册表

3 总结

外观模式最核心本质就是封装交互,简化调用。大多情况下系统内部会产生很多小的子系统,或者在迭代过程中演化得越来越复杂,这会给外部调用者带来了使用上的不便利,使有外观类进行整合提供一个简单的接口,对外隐藏了系统的具体实现和隔离了变化,这样也减少调用者与多个系统的关联依赖。但有个小缺点就是当一个子系统业务出现变更时,它虽然不会对调用者和其它子功能造成影响,但有可能需要修改到外观类,这也存在着违背开闭原则。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值