Facade Pattern and Encapsulation—— Structure Class
如果只看代码的话,应该可以说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的更多相关文章
- C#设计模式之十外观模式(Facade Pattern)【结构型】
一.引言 快12点半了,要开始今天的写作了.很快,转眼设计模式已经写了十个了,今天我们要讲[结构型]设计模式的第五个模式,该模式是[外观模式],英文名称是:Facade Pattern.我们先从名字上 ...
- 外观模式Facade pattern
http://www.runoob.com/design-pattern/facade-pattern.html 外观模式 外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一 ...
- 设计模式(八): 从“小弟”中来类比"外观模式"(Facade Pattern)
在此先容我拿“小弟”这个词来扯一下淡.什么是小弟呢,所谓小弟就是可以帮你做一些琐碎的事情,在此我们就拿“小弟”来类比“外观模式”.在上面一篇博文我们完整的介绍了“适配器模式”,接下来我们将要在这篇博客 ...
- 深入浅出设计模式——外观模式(Facade Pattern)
模式动机引入外观角色之后,用户只需要直接与外观角色交互,用户与子系统之间的复杂关系由外观角色来实现,从而降低了系统的耦合度. 模式定义外观模式(Facade Pattern):外部与一个子系统的通信必 ...
- 二十四种设计模式:外观模式(Facade Pattern)
外观模式(Facade Pattern) 介绍为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用.示例有一个Message实体类,某对象对它 ...
- 乐在其中设计模式(C#) - 外观模式(Facade Pattern)
原文:乐在其中设计模式(C#) - 外观模式(Facade Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 外观模式(Facade Pattern) 作者:webabcd 介绍 ...
- 使用C# (.NET Core) 实现适配器模式 (Adapter Pattern) 和外观模式 (Facade Pattern)
本文的概念内容来自深入浅出设计模式一书 现实世界中的适配器(模式) 我带着一个国标插头的笔记本电脑, 来到欧洲, 想插入到欧洲标准的墙壁插座里面, 就需要用中间这个电源适配器. 面向对象的适配器 你有 ...
- [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 ...
- php门面模式(facade pattern)
书上不全的代码,我自己补全的. <?php /* The facade pattern is used when we want to simplify the complexities of ...
- [Design Patterns] 02. Structural Patterns - Facade Pattern
前言 参考资源 史上最全设计模式导学目录(完整版) 只把常用的五星的掌握即可. 外观模式-Facade Pattern[学习难度:★☆☆☆☆,使用频率:★★★★★] 深入浅出外观模式(一):外观模式概 ...
随机推荐
- 40% building 31/38 modules 7 active ...es\core-js\modules\es6.object.assign.jsBrowserslist: caniuse-lite is outdated.
一早运行项目发现不正常 虽然能运行,但是怎么看都不顺眼啊,那就照着提示先: npm update 一连串下来啥也看不懂是不是 我就直接npm install看看重新下载一下依赖结果直接给我来了个 :c ...
- 【HDU】1312 Red andBlack (DFS&BFS经典好题)
Red and Black 题目 我是题目链接 题解 找出所能到达的所有黑色的数量,用DFS和BFS均可. BFS: #include <iostream> #include <qu ...
- Java实现猜拳小游戏
Java实现猜拳游戏的核心在于电脑随机数的生成,Java中的随机数生成方法是:首先引入包 import java.util.*; 然后 int r=new Random().nextInt( ...
- Java(类与对象、封装)
面向过程.面向对象 面向对象编程(Object-Oriented Programming, OOP) 本质:以类的方式组织代码,以对象的组织(封装)数据. 抽象 三大特性 封装 继承 多态 从认识论的 ...
- R 包初学者指南
由于微信不允许外部链接,你需要点击文章尾部左下角的 "阅读原文",才能访问文中链接. 基于 11 个最常见的用户问题介绍 R 软件包. R 包是由社区开发 (developed b ...
- 国际顶刊《PNAS》:爱发朋友圈的人,更容易长寿
点上面关注我们,每日获取前沿新知 近几十年来,智能手机和网络的普及率越来越高,与此同时,"朋友圈"应运而生. 在这个朋友圈里,有人十分活跃,而也有些人是"国家级潜水运动员 ...
- JavaWeb入门必备JavaEE规范!
前言 对于学习 Java 的同学,大都是 Web 方向的.我们学习 JavaWeb 开发肯定是一个循序渐进的过程,学习前有一些前置知识要掌握,比如 JavaSE 相关知识,HTML.CSS.JavaS ...
- 经纬度坐标为中心点生成米距离长度半径的圆形面,含java js源码+在线绘制,代码简单零依赖
目录 java版源码 js版源码 在线绘制预览效果 关于计算的精确度 前些时间在更新我的坐标边界查询工具的时候,需要用到经纬度坐标点的距离计算,和以坐标点为中心生成一个指定距离为半径的圆,搜了一下没有 ...
- Falcon 登陆 Hugging Face 生态
引言 Falcon 是由位于阿布扎比的 技术创新研究院 (Technology Innovation Institute,TII) 创建的一系列的新语言模型,其基于 Apache 2.0 许可发布. ...
- 分享6个SQL小技巧
原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,非公众号转载保留此声明. 简介 经常有小哥发出疑问,SQL还能这么写?我经常笑着回应,SQL确实可以这么写.其实SQL学起来简单,用起来也 ...