如果只看代码的话,应该可以说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. vue全家桶进阶之路50:Vue3 环境变量+跨域设置实例

    使用.env加后缀的方式来建立某个模式下的环境变量, 例如:项目根目录新建两个环境变量文件(development开发环境和production生产环境): .env.development .env ...

  2. 一些JS过滤方法

    一般过滤器我们都会卸载过滤filter文件内 本文这里就直接写正常methods格式的 //过滤空格 filterSpaces(data) { return data.replace(/\s+/g, ...

  3. 啊哈C语言案例学习笔记

    Hello World #include<stdio.h> /* 技术要点: 初学者在编写程序时,经常会忘记在语句后边添加分号, */ int main() { printf(" ...

  4. 2023-05-20:go语言的slice和rust语言的Vec的扩容流程是什么?

    2023-05-20:go语言的slice和rust语言的Vec的扩容流程是什么? 答案2023-05-20: go语言的slice扩容流程 go版本是1.20.4. 扩容流程见源码见runtime/ ...

  5. L3-017 森森快递

    一.题目: 7-2 森森快递 (30 分) 森森开了一家快递公司,叫森森快递.因为公司刚刚开张,所以业务路线很简单,可以认为是一条直线上的N个城市,这些城市从左到右依次从0到(N−1)编号.由于道路限 ...

  6. 【技术分享】万字长文图文并茂读懂高性能无锁 “B-Tree 改”:Bw-Tree

    [技术分享]万字长文图文并茂读懂高性能无锁 "B-Tree 改":Bw-Tree 原文链接: https://mp.weixin.qq.com/s/I5TphQP__tHn6JoP ...

  7. K2C V21.4.6.12刷breed教程

    K2C V21.4.6.12刷breed教程(刷机方法源自qiao99) 原贴地址:K2C V21.4.6.12刷breed记录 http://www.right.com.cn/forum/threa ...

  8. “古老”编程语言的最新选择!华为云发布CodeArts IDE for C/C++

    摘要:华为云CodeArts IDE for C/C++正式上线,欢迎体验. 本文分享自华为云社区<"古老"编程语言的最新选择!华为云发布CodeArts IDE for C ...

  9. 行行AI人才直播第3期:浙江大学周鑫博士《空中机器人复杂环境高效自主导航—从单机到集群》

    行行AI人才是博客园和顺顺智慧共同运营的AI行业人才全生命周期服务平台. 空中飞行的无人车.无人机集群是科幻电影的常客,也往往是未来科技的一大代表.在电影<星球大战:西斯的复仇>(2005 ...

  10. 2023-07-01:redis过期策略都有哪些?LRU 算法知道吗?

    2023-07-01:redis过期策略都有哪些?LRU 算法知道吗? 答案2023-07-01: 缓存淘汰算法(过期策略) 当Redis的内存超出物理内存限制时,内存中的数据就会频繁地与磁盘进行交换 ...