博客
关于我
外观模式
阅读量:810 次
发布时间:2019-03-24

本文共 1527 字,大约阅读时间需要 5 分钟。

外观模式解析

外观模式(Facade Pattern),又称门面模式,是软件设计中一种常用的设计模式。它通过为多个复杂子系统提供一个统一的接口,使外部应用无需关心内部子系统的具体实现细节,从而降低了系统的复杂性,提高了可维护性和灵活性。

模式本质

外观模式的核心思想是把零散的功能模块抽象成一个整体。通过引入中介类,将分散的功能组合成一个统一的服务接口,简化了外部对系统的访问需求。这种设计理念强调功能的整合与标准化,避免了过度耦合和功能孤岛的产生。

典型场景

可以想象,在房建领域,装修公司充当外观角色,整合了墙工、水电是否和贴砖等分散功能。通过统一的接口,客户只需调用一个服务,房屋装修工作立即完成。这正是外观模式的实际应用场景:它将零散、分散的功能模块,复合成一个易于使用的整体服务。

以代码为例

让我们用一个简单的例子来理解外观模式。假设有三个子系统:刷墙、装修公司、地砖铺设。每个子系统都有自己的处理逻辑:

  • 刷墙类:负责给墙刷漆
  • 装修公司类:协调其他子系统完成整体装修工作
  • 地砖铺设类:负责地板砖的安装

装修公司类将各子系统通过统一接口暴露给外部,外部只需调用一次装修任务即可完成整个装修流程。这解决了内件复杂性问题,使外部无需关心具体实现细节。

实现示例

class Facade {    private Wall washer;    private Electrician electrician;    private Carpenter carpenter;    Facade() {        this.washer = new Wall();        this.electrician = new Electrician();        this.carpenter = new Carpenter();    }    void decorate() {        washer.washWall();        electrician.installElectrics();        carpenter.InstallCarpentry();    }}// 子系统class Wall {    void washWall() { System.out.println("刷墙..."); }}class Electrician {    void installElectrics() { System.out.println("安装电路..."); }}class Carpenter {    void InstallCarpentry() { System.out.println("安装木工..."); }}// 测试类class Test {    public static void main(String[] args) {        Facade facade = new Facade();        facade.decorate();    }}// 输出:// 刷墙... installing电路...安装木工...

� Chí angel şeyler

通过该设计模式,用户可以避免了直接处理复杂的内部系统逻辑,降低了耦合度,提高了系统的可扩展性和维护性。此外,外观模式还为系统集成提供了良好的灵活性,特别是在搭建复杂应用时,能够更轻松地整合各种分布式服务。

总的来说,外观模式的适用场景是当系统内部存在多个既不相互关联也不相互兼容的子系统时,可以通过一个统一接口将这些子系统整合在一起,从而实现系统功能的透明化和批量化操作,解决了功能分散带来的问题。

转载地址:http://yyhkk.baihongyu.com/

你可能感兴趣的文章
QT点击"X"按钮,调用closeEvent()函数来实现调用特定事件(附:粗略介绍QT的信号与槽的使用方法)...
查看>>
QT样式表——url路径
查看>>
QT数据库(三):QSqlQuery使用
查看>>
QT教程5:消息框
查看>>
SpringBoot中集成阿里开源缓存访问框架JetCache实现声明式实例和方法缓存
查看>>
pom.xml中提示web.xml is missing and <failonmissingw>...
查看>>
Pomelo开发中Web客户端开发API简介
查看>>
QT教程2:QT5的体系构架
查看>>
PON架构(全光网络)
查看>>
PoolingHttpClientConnectionManager原理剖析
查看>>
QT教程1:ubuntu18.04安装QT5
查看>>
POP-一个点击带有放大还原的动画效果
查看>>
POP3 协议在计算机网络中的优缺点
查看>>
qt批量操作同类型控件
查看>>
Portaudio笔记-WASAPI
查看>>
position:fixed失效情况
查看>>
Qt开发笔记:QGLWidget、QOpenGLWidget详解及区别
查看>>
Position属性四个值:static、fixed、absolute和relative的区别和用法
查看>>
POSIX thread编程中关于临界区内条件变量的分析
查看>>
POSIX与程序可移植性
查看>>