设计模式——外观模式(Facade)

【Java设计模式】Java设计模式之(二十二)外观模式(Facade Pattern) 这种类型的设计模式属于结构型模式。 一、组合模式介绍 1.1 含义 外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。 这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。 在日常编码工作中,我们都在有意无意的大量使用外观模式。只要是上层模块需要调度多个子系统(2个以上的类对象),我们都会自觉地创建一个新的类封装这些子系统,提供 阅读详情

外观模式(Facade)

定义

定义了一个高层、统一的接口,外部与通过这个统一的接口对子系统中的一群接口进行访问。

image

优缺点

优点
- 实现客户类与子系统类的松耦合

  • 降低原有系统的复杂度
  • 提高了客户端使用的便捷性,使得客户端无须关心子系统的工作细节,通过外观角色即可调用相关功能。

    (1)引入外观角色之后,用户只需要与外观角色交互;

    (2)用户与子系统之间的复杂逻辑关系由外观角色来实现

缺点
- 在不引入抽象外观类的情况下,增加新的子系统可能需要修改外观类或客户端的源代码,违背了“开闭原则”
- 不能很好地限制客户使用子系统类,如果对客户访问子系统类做太多的限制则减少了可变性和灵活性。

改进-抽象外观模式

可以参考 https://www.beibq.cn/book/7jvf266-9281
感觉,抽象外观模式有些得不偿失

优点
- 不违反开闭原则

缺点

  • 代码冗余

    可能新外观类大部分代码和旧的一样,造成代码冗余

  • 引入新外观类

    需求不断变化,那么需要不停引入新外观类,麻烦

  • 外观类使用变复杂

    毕竟需要动态的引用外观类,用户使用的方式可能要通过获取线上配置等方式再利用反射创建对应类。

应用场景

  • 要为一个复杂的子系统对外提供一个简单的接口
  • 提供子系统的独立性
  • 客户程序与多个子系统之间存在很大的依赖性
  • 引入外观类将子系统与客户以及其他子系统解耦,可以提高子系统的独立性和可移植性。
  • 在层次化结构中,可以使用外观模式定义系统中每一层的入口层与层之间不直接产生联系,而通过外观类建立联系,降低层之间的耦合度

举例

吃瓜群众想知道程序猿日常一天怎么度过

程序猿的相关类

public class Morning {
    public void washFace(){
        System.out.println("------洗脸------");
    }

    public void clothing(){
        System.out.println("------换衣服------");
    }

    public void toothbrushing(){
        System.out.println("------刷牙------");
    }

    public void breakfast(){
        System.out.println("------吃早餐------");
    }
}


public class DayTime {
    public void coding(){
        System.out.println("---写代码---嗒嗒嗒---嗒嗒嗒");
    }
    public void lunch(){
        System.out.println("-----吃午饭-----");
    }

    public void nooning(){
        System.out.println("-----午休-呼噜~呼噜~~~");
    }

    public void supper(){
        System.out.println("-----吃晚饭-----");
    }
}

public class NightLife {
    public void bathing(){
        System.out.println("-----洗澡-----");
    }

    public void gaming(){
        System.out.println("-----打游戏-----");
    }

    public void sleep(){
        System.out.println("-----睡觉~呼噜~呼噜-----");
    }

}

外观类作为中介,介绍程序猿一天

public class ProgramerLifeFacade {
    public void programerLife(){
        getup();
        System.out.println();
        work();
        System.out.println();
        nightLife();
    }

    private void getup(){
        System.out.println("===========早上起床==========");
        Morning morning = new Morning();
        morning.toothbrushing();
        morning.washFace();
        morning.clothing();
        morning.breakfast();
    }

    private void work(){
        System.out.println("===========白天工作==========");
        DayTime dayTime = new DayTime();
        dayTime.coding();
        dayTime.coding();
        dayTime.lunch();
        dayTime.nooning();
        dayTime.coding();
        dayTime.coding();
        dayTime.supper();
        dayTime.coding();
        dayTime.coding();
    }

    private void nightLife(){
        System.out.println("===========下班夜生活==========");
        NightLife night = new NightLife();
        night.bathing();
        night.gaming();
        night.sleep();
    }
}

吃瓜群众查看程序猿日常

public class Client {
    public static void main(String args[]){
        ProgramerLifeFacade programerLife = new ProgramerLifeFacade();
        programerLife.programerLife();
    }
}

查看结果:

===========早上起床==========
------刷牙------
------洗脸------
------换衣服------
------吃早餐------

===========白天工作==========
---写代码---嗒嗒嗒---嗒嗒嗒
---写代码---嗒嗒嗒---嗒嗒嗒
-----吃午饭-----
-----午休-呼噜~呼噜~~~
---写代码---嗒嗒嗒---嗒嗒嗒
---写代码---嗒嗒嗒---嗒嗒嗒
-----吃晚饭-----
---写代码---嗒嗒嗒---嗒嗒嗒
---写代码---嗒嗒嗒---嗒嗒嗒

===========下班夜生活==========
-----洗澡-----
-----打游戏-----
-----睡觉~呼噜~呼噜-----
【愚公系列】二十三种设计模式(十)-外观模式(Facade Pattern) 设计模式(Design Pattern)是软件开发领域的宝贵经验,是多人反复借鉴和广泛应用的代码设计指导。它们是一系列经过分类和归纳的代码组织方法,旨在实现可重用性、可维护性和可理解性。使用设计模式,我们能够编写高质量的代码,使其更易于他人理解,并提供了代码可靠性的保证。毫无疑问,设计模式对个人、团队和整个系统都带来了显著的益处。它们将代码开发提升到工程化水平,为软件工程构建提供了坚实的基础,就如同大厦的一块块精巧的砖石一样。在项目中明智地应用设计模式可以完美地解决各种复杂问题。 阅读详情

相关推荐

基于Web的智能家居(源码+开题)

实践上,智能家居系统的普及和应用将极大改善人们的居住体验,提高生活质量,同时也有助于促进智能家居产业链的发展和完善,为社会经济发展注入新的活力。此外,本研究还将对基于Web的智能家居系统的用户体验进行深入研究,通过用户调研和数据分析,不断优化系统功能和界面设计,提升用户的使用体验和满意度。针对以上问题,本研究将综合运用物联网、云计算、大数据等新一代信息技术,通过系统架构设计、功能模块开发、安全性保障、用户体验优化等多个方面的研究工作,力求为基于Web的智能家居系统的研发和应用提供全面而有效的解决方案。

sryue06的博客 1903

设计模式之外观模式

外观模式 定义: ​ 是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。 使用场景: 当要为一个复杂子系统提供一个简单接口时可以使用外观模式。该接口可以满足大多数用户的需求,而且用户也可以越过外观类直接访问子系统。 客户程序...

qq_40788718的博客 228

电机驱动技术中关于磁阻转矩生成的理解

正交在物理学和数学中指的是两个方向或两个向量之间的夹角为90°(直角)。在图中,当气隙磁场的轴线与转子轴线的夹角为90°时,我们称它们为正交。转子磁极的方向。通常由转子的磁极中心指向另一极的连线表示。转子轴线用图示中的d 轴表示。通过对定子、转子、气隙磁场、磁力线的理解,我们可以清晰地分析不同角度下电磁转矩的方向。这种分析不仅有助于电机的理论学习,还能为实际设计提供重要参考。掌握这些基础知识后,可以更好地理解电机工作原理及优化其性能。

weixin_48327795的博客 2074

JAVA设计模式(22) —外观(Facade)模式

定义:为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 类型:对象结构型模式 类图: Facade模式的结构 外观角色(Facade):是模式的核心,他被客户client角色调用。它知道那些子系统类负责处理请求,并将客户的请求转发给适当的子系统对象。子系统角色(Subsystem

Ricky 1887

绑定压力的计算方法

压强的公式为P=F/S,其中P为ACF要求的本压压强范围,S为受压面积,F为本压压头施加的力。绑定参数需要按线体按压头进行DOE确认,并使用DOE确认好的参数按压头重新绑定标识好送ACF厂商实测固化率、粒子变形的情况,避免绑定参数导致的异常,在绑定参数的设定过程中温度和时间可以使用仪器实测但绑定的压力则需要换算。工程上绑定压力换算的原则是:1、FPC属于柔性物料,柔性物料的受压面积按FPC绑定的受压面积=FPC绑定的长度。一、工程上FOG FPC本压压力换算(柔性材料以挤压的接触面积=受力面积)F=P。

weixin_53757859的博客 1533

SLUB DEBUG 检测slab 内存泄漏

文章介绍如何定位linux 内核中slab 内存泄漏。

一叶知秋的博客 1491

设计模式选择题复习

1.在UML提供的图中,( )用于描述系统与外部系统及用户之间的交互 A.用例图 B.类图 C.对象图 D.部署图 2.在UML提供的图中,( )用于按时间顺序描述对象之间的交互。 A、对象图 B、状态图 C、活动图 D、时序图 3.以下关于类成员的可见性叙述错误的是( ) A、可见性为public时,类内和类外可以使用 B、可见性为protected时,类内及子类可以使用 C、可见性为private时,类内及类外皆不可以使用 D、可见性为public或protected时,子类皆可以使用 4

qq_51481704的博客 8363

INS/伪距组合导航(1)

星间单差GNSS/INS伪距紧组合

u014430081的博客 874

设计模式读书笔记-----外观模式

前面介绍的适配器模式(设计模式读书笔记-----适配器模式)讲的是如何将一个接口转换成客户所需要的另一个接 口,它的目的在于解决接口的不兼容性问题。现在这里有这样一个模式,它的目的在于如何简化接口,它可以将多个 类的复杂的一切隐藏在背后,只显露出一个干净美观的外观。 晚上睡觉之前,你总是喜欢看电视,在你进入卧室的时候你需要完成以下几个步骤:打开电灯、打开空调、放 心银幕...

chenssy 的技术博客 557

CentOS 7下glibc升级到2.28的保姆级避坑指南(含GCC 7.3.1编译配置)

本文详细介绍了在CentOS 7系统中将glibc升级到2.28版本的完整流程,包括GCC 7.3.1的编译配置、环境变量设置、glibc编译的细节处理以及生产环境验证。文章特别强调了风险控制和避坑技巧,适用于需要提升系统兼容性的企业级用户。

weixin_29611239的博客 408

基于Pycatia的智能孔特征识别技术:无参模型圆心自动化提取方案

基于Pycatia的智能孔特征识别技术:无参模型圆心自动化提取方案

KE17RS的博客 2876

设计模式 - 结构型模式 - 外观模式

设计模式中的结构型模式里面的外观模式。

布道之道 420

Transformer在BEV感知中的统治地位

Transformer在BEV感知中的统治地位 ,人工智能,计算机视觉,大模型,AI,本文围绕 Transformer 在 BEV 感知中的统治地位展开,介绍了 Transformer 的基础原理,如自注意力、多头注意力机制等,以及 BEV 感知的概念、任务与挑战。阐述了 Transformer 在 BEV 感知中的技术优势,包括全局建模、灵活特征融合和长距离依赖捕捉能力,还介绍了典型架构、代码示例及在自动驾驶目标检测等领域的应用案例。同时,评估了其性能,提及优化方法,并展望了与其他技术融合、端到端系统等…

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 20万+

23种设计模式——外观模式(Facade Pattern)详解

本文介绍了23种设计模式之——外观模式(Facade Pattern)的说明及使用

Meteors.的博客 1229

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

设计模式-外观模式-Facade Pattern

例如,在Java微服务项目中,外观模式可以用于代码分层,其中Facade作为对外暴露API接口的一层,Controller作为API的实现类,Service为核心业务服务。在这些语言中,外观模式的实现方式可能会有所不同,但核心思想是一致的:提供一个高级的接口,简化对子系统的操作。这种模式隐藏了子系统的细节,使得客户端代码可以通过一个简单的接口来访问子系统的功能,从而降低了客户端与复杂子系统之间的耦合度。外观模式是一个强大的工具,可以帮助简化复杂系统的接口,但也应该谨慎使用,以避免引入不必要的抽象层次。

wesigj的博客 2834

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Java设计模式——外观模式【Facade Pattern】

Java设计模式、外观模式、Facade Pattern

scorpio的博客 560

C++ 设计模式 外观模式 The Facade Pattern

Facade Pattern 为一组复杂的子系统提供了一个统一的简单接口,它是一种结构型设计模式。它隐藏了子系统的复杂性,并向客户端提供了一个简单的接口来访问子系统。通过使用 Facade 模式,客户端可以方便地使用子系统,而不必了解子系统的内部细节。在 C++ 中,Facade 模式可以使用继承和组合的方式实现。Facade 类可以继承自 Subsystem 类,也可以包含一个 Subsystem 类的对象。

qq_42896106的博客 330

【23种设计模式】外观模式(Facade Pattern)

Facade模式,又叫外观模式。它属于结构型设计模式的一种。Facade模式旨在为复杂的子系统提供一个简化的接口,从而隐藏系统的复杂性,使客户端能够更方便地使用系统。 在软件开发中,大型系统通常由多个子系统组成,每个子系统都有自己的一组接口和功能。这些子系统之间的交互可能会变得非常复杂,对于客户端来说,直接与这些子系统进行交互可能会变得困难和繁琐。 外观模式(Facade模式)可以视为面向对象中封装的一种应用。给外界提供清晰明了的使用方式,不用关心内部的复杂逻辑。

金鳞踏雨 948

设计模式-09外观模式Facade Pattern

外观模式是一种简化复杂系统访问的结构型设计模式,它通过提供一个统一的高层接口来隐藏子系统内部的复杂性。该模式适用于需要为复杂系统提供简化接口、降低客户端与子系统耦合度的场景。文章通过计算机启动示例展示了经典外观模式的实现,包含CPU、内存和硬盘等子系统的封装,对比了使用外观模式前后客户端代码的复杂度差异。此外还介绍了分层外观模式在数据层和业务逻辑层的应用示例。外观模式能显著提高代码可维护性和易用性,是处理复杂系统交互的有效解决方案。

d3y1`5 81_09 757

设计模式总结之Facade Pattern(外观模式)

Facade Pattern(外观模式) 意图 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 适用性 * 当你要为一个复杂子系统提供一个简单接口时。子系统往往因为不断演化而变得越来越复杂。大多数模式使用时都会产生更多更小的类。这使得子系统更具可重用性, 也更容易对子系统进行定制,但这也给那些不需要定制子系统的用户带

cooldragon的专栏 5662

23种设计模式之外观模式(Facade Pattern)

本篇文章将23种设计模式中的外观模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识

小威的博客 2万+

C#设计模式读书笔记之外观模式(Facade pattern)

外观模式(Facade pattern)【使用频率:★★★★★】 1. 概述   为复杂的子系统中提供一个统一的入口,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式是迪米特法则的一种具体实现,通过引入一个新的外观角色可以降低原有系统的复杂度,同时降低客户类与子系统的耦合度。 2. 模式中的角色   2.1 外观类(Facade):在外观角色中可以知道相关的(一个或...

qq826364410的专栏 262

设计模式教程:外观模式(Facade Pattern)

为子系统中的一组接口提供一个统一的高层接口,使得子系统更容易使用。

遇见伯灵说的博客 1216

设计模式(十一)——外观模式(Facade Pattern)

外观模式(Facade Pattern) 基本介绍 外观模式(Facade),也叫“过程模式,为子系统中的一组接口提供一个一致的入口,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用(封装子系统的复杂性,便于客户端调用)。 外观模式通过定义一个一致的接口,用以屏蔽内部子系统的细节,使得调用端只需跟这个接口发生调用,而无需关心这个子系统的内部细节。 外观模式的UML类图 角色分析 ...

Duktig的博客 428

设计模式之 - 外观模式 (Facade design pattern)

1. 模式意图:  为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更容易使用。 2. 结构 3. 工厂方法模式C#实现 using System; using System.Collections.Generic; using System.Text; namespac

比昂日记 1249

【设计模式】——外观模式(Facade Pattern)

外观模式是一种非常实用的设计模式,特别适用于复杂的系统,通过提供一个简单的接口来减少客户端与子系统之间的耦合。在C++中,通过类的封装和组合,可以很容易地实现外观模式,从而提升代码的可维护性和可扩展性。

J^T的博客 1119
上一篇: 设计模式——适配器模式
下一篇: 设计模式——装饰者模式
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值