如果只看代码的话,应该可以说Facade pattern(门面设计模式)是一种最简单的代码结构,不就封装吗!这玩意谁不会!

还是看它背后所蕴含的思想吧,看了之后发现背后的思想也很简单,非常好理解。 - -。

Think

Encapsulation:

在物理世界中,从古代的弹药子弹的发展其实就是对弹药的封装,因此大大提高了装弹效率。经过演化,发现一次装一发子弹还是不够高效,如果再进一步,在子弹外再封装一层弹夹的话则会更显著地提升效率。

在Java编程中,一对大括号{ }就是类、方法等结构的外壳、边界,它能很好地把类的各种属性及行为包裹起来,将它们封装在类内部并固化成一个整体。封装好的类如同一个黑匣子,外部无法看到内部的构造及运转机制,而只能访问其暴露出来的属性或方法。

门面设计模式:

本质上来讲,它和封装的含义是一样的,无非是一般概念里的封装只是针对同一个类内的属性,方法进行封装,这里的封装更泛一些,能包含更广泛的子系统的方法。

门面设计模式可以隐藏系统的内部复杂性,提供一个简化的操作接口,使得客户端更容易使用系统。

该模式通过提供一个高层次的接口,将一个或多个子系统的复杂操作封装起来,使得客户端只需要与门面对象进行交互,而不需要直接与子系统的各个组件进行通信。这样可以减少客户端与子系统之间的耦合,降低了系统的复杂性,同时提供了一种简洁、统一的界面。

Example - 音响系统

假设我们有一个音响系统,包含多个子系统组件,如音频播放器、发光灯和温度控制器。我们可以创建一个音响门面类,负责封装这些子系统的复杂操作,并提供一个简单的接口供客户端使用。

// 子系统组件 - 音频播放器
class AudioPlayer {
public void play() {
System.out.println("播放音频");
}
} // 子系统组件 - 发光灯
class Light {
public void turnOn() {
System.out.println("打开发光灯");
}
} // 子系统组件 - 温度控制器
class TemperatureController {
public void setTemperature(int temperature) {
System.out.println("设置温度为:" + temperature + "℃");
}
} // 音响门面类
class StereoFacade {
private AudioPlayer audioPlayer;
private Light light;
private TemperatureController temperatureController; public StereoFacade() {
audioPlayer = new AudioPlayer();
light = new Light();
temperatureController = new TemperatureController();
} // 提供简化的接口
public void startMusic() {
audioPlayer.play();
light.turnOn();
temperatureController.setTemperature(25);
System.out.println("音乐系统已启动");
}
} // 客户端代码
public class Main {
public static void main(String[] args) {
StereoFacade stereo = new StereoFacade();
stereo.startMusic();
}
}

在上述代码中,StereoFacade类充当门面类,它封装了音频播放器、发光灯和温度控制器的复杂操作。客户端代码只需要与StereoFacade交互,通过调用startMusic方法,即可启动音响系统,而无需关心底层子系统的具体实现细节

通过门面模式,客户端代码与子系统之间的耦合度得到降低,系统的复杂性得到简化,同时提供了一个简单、统一的接口,便于客户端的使用。

Facade Pattern and Encapsulation—— Structure Class的更多相关文章

  1. C#设计模式之十外观模式(Facade Pattern)【结构型】

    一.引言 快12点半了,要开始今天的写作了.很快,转眼设计模式已经写了十个了,今天我们要讲[结构型]设计模式的第五个模式,该模式是[外观模式],英文名称是:Facade Pattern.我们先从名字上 ...

  2. 外观模式Facade pattern

    http://www.runoob.com/design-pattern/facade-pattern.html 外观模式 外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一 ...

  3. 设计模式(八): 从“小弟”中来类比"外观模式"(Facade Pattern)

    在此先容我拿“小弟”这个词来扯一下淡.什么是小弟呢,所谓小弟就是可以帮你做一些琐碎的事情,在此我们就拿“小弟”来类比“外观模式”.在上面一篇博文我们完整的介绍了“适配器模式”,接下来我们将要在这篇博客 ...

  4. 深入浅出设计模式——外观模式(Facade Pattern)

    模式动机引入外观角色之后,用户只需要直接与外观角色交互,用户与子系统之间的复杂关系由外观角色来实现,从而降低了系统的耦合度. 模式定义外观模式(Facade Pattern):外部与一个子系统的通信必 ...

  5. 二十四种设计模式:外观模式(Facade Pattern)

    外观模式(Facade Pattern) 介绍为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用.示例有一个Message实体类,某对象对它 ...

  6. 乐在其中设计模式(C#) - 外观模式(Facade Pattern)

    原文:乐在其中设计模式(C#) - 外观模式(Facade Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 外观模式(Facade Pattern) 作者:webabcd 介绍 ...

  7. 使用C# (.NET Core) 实现适配器模式 (Adapter Pattern) 和外观模式 (Facade Pattern)

    本文的概念内容来自深入浅出设计模式一书 现实世界中的适配器(模式) 我带着一个国标插头的笔记本电脑, 来到欧洲, 想插入到欧洲标准的墙壁插座里面, 就需要用中间这个电源适配器. 面向对象的适配器 你有 ...

  8. [Angular] Extract Implementation Details of ngrx from an Angular Application with the Facade Pattern

    Extracting away the implementation details of ngrx from your components using the facade pattern cre ...

  9. php门面模式(facade pattern)

    书上不全的代码,我自己补全的. <?php /* The facade pattern is used when we want to simplify the complexities of ...

  10. [Design Patterns] 02. Structural Patterns - Facade Pattern

    前言 参考资源 史上最全设计模式导学目录(完整版) 只把常用的五星的掌握即可. 外观模式-Facade Pattern[学习难度:★☆☆☆☆,使用频率:★★★★★] 深入浅出外观模式(一):外观模式概 ...

随机推荐

  1. 报错HTTP 405 Method Not Allowed, Allow: POST, OPTIONS, "detail": "方法 “GET” 不被允许。"

    当测试注册功能是否实现时,出现了这种情况的405:HTTP 405 Method Not AllowedAllow: POST, OPTIONSContent-Type: application/js ...

  2. Shiro 授权绕过 (CVE-2022-32532)

    Shiro 授权绕过 (CVE-2022-32532) 一.产品简介 Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码和会话管理. 1.9.1 之前的 Apache ...

  3. openlayers获取绘制多边形的顶点坐标

    虽使用Interaction无数次,进行图形绘制与用户交互等,但当需要获取绘制图形的顶点坐标时还是不晓得咋弄? 都知道在绘制完成后回调中能获取到当前的event对象draw.on('drawend', ...

  4. Python-PyQt5的安装与简单使用

    一.安装 1.安装 PyQt5 和 PyQt5-tools pip install PyQt5 -i https://pypi.douban.com/simple pip install PyQt5- ...

  5. ChatGPT教我用200行代码写一个简版Vue框架 - OpenTiny

    AI 是未来最好的老师 最近,我正在准备一份关于 Vue 基础的学习材料.期间我突发奇想:能否利用现在热门的 ChatGPT 帮我创建学习内容?其实 Vue 本身不难学,特别是基础用法,但是,如果你想 ...

  6. Custom directive is missing corresponding SSR transform and will be ignored

    背景 最近在给业务组件库集成指令库,将各个项目中常用的指令如一键复制.元素和弹窗拖拽等封装到一起,进行统一发版维护. 业务组件库项目架构采用的是pnpm+vite+vue3+vitepress,其中v ...

  7. GPT3的性能评估:比较不同语言、文本和任务的差异

    目录 GPT-3 性能评估:比较不同语言.文本和任务的差异 近年来,自然语言处理 (NLP) 和人工智能领域取得了巨大的进展,其中 GPT-3 是目前最为先进的语言模型之一.GPT-3 拥有超过 17 ...

  8. asp.net程序通过Microsoft Azure中SAML协议实现单点登录

    1. 新建应用程序 登录Azure门户,进入左侧菜单"企业应用程序--所有应用程序",点"新建应用程序", 继续点"创建你自己的应用程序", ...

  9. uniapp学习(一)

    [新课uniapp零基础入门到项目打包(微信小程序/H5/vue/安卓apk)全掌握] https://www.bilibili.com/video/BV1mT411K7nW/?p=24&sh ...

  10. Windows电脑环境变量(用户变量、系统变量)的修改

      本文介绍在Windows 10操作系统中,进行用户变量.系统变量等两种环境变量的新建.修改与删除的详细方法.   在很多时候,我们需要对Windows电脑的环境变量加以修改,例如安装一些专业软件. ...