当前位置: 首页 > news >正文

外观模式(面子模式)

外观模式

文章目录

  • 外观模式
    • 什么是外观模式
    • 示例

什么是外观模式

外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用

Facade 外观类

知道哪些子系统类负责处理请求,将客户的请求代理给适当的子系统对象

SubSystem Classes 子系统类集合

实现子系统的功能,处理Facade对象指派的任务。注意子类中没有Facade的任何信息,即没有对Facade对象的引用

示例

外观模式(Facade Pattern)是一种结构设计模式,它为子系统中的一组接口提供了一个统一的高层接口,简化了外部对子系统的访问。以下是一个使用 Java 实现外观模式的示例,以简化对音乐播放系统的操作为例:

1.定义音乐播放系统中的各个子系统组件接口:

// 音乐播放器
public interface MediaPlayer {// 播放void play();// 停止void stop();// 暂停void pause();
}
public interface CDPlayer {void playCD(String title);void stopCD();// 弹出void ejectCD();
}
// 收音机
public interface Radio {// 频道void tuneFrequency(int frequency);void turnOn();void turnOff();
}

2.实现子系统组件:

public class CDPlayerImpl implements CDPlayer {@Overridepublic void playCD(String title) {System.out.println("Playing CD: " + title);}@Overridepublic void stopCD() {System.out.println("Stopping CD playback.");}@Overridepublic void ejectCD() {System.out.println("Ejecting CD.");}
}
public class RadioImpl implements Radio {@Overridepublic void tuneFrequency(int frequency) {System.out.println("Tuning radio to frequency: " + frequency);}@Overridepublic void turnOn() {System.out.println("Turning on the radio.");}@Overridepublic void turnOff() {System.out.println("Turning off the radio.");}
}

3.创建音乐播放系统的外观类(Facade),封装子系统组件的操作:

public class MusicPlayerFacade {private CDPlayer cdPlayer;private Radio radio;public MusicPlayerFacade(CDPlayer cdPlayer, Radio radio) {this.cdPlayer = cdPlayer;this.radio = radio;}public void playCD(String title) {cdPlayer.playCD(title);}public void stopMusic() {cdPlayer.stopCD();radio.turnOff();}public void playRadio(int frequency) {radio.turnOn();radio.tuneFrequency(frequency);}
}

4.在客户端代码中,通过外观类 MusicPlayerFacade 简化对音乐播放系统的操作:

public class MusicPlayerDemo {public static void main(String[] args) {CDPlayer cdPlayer = new CDPlayerImpl();Radio radio = new RadioImpl();MusicPlayerFacade musicPlayer = new MusicPlayerFacade(cdPlayer, radio);musicPlayer.playCD("My Favorite Album");musicPlayer.stopMusic();musicPlayer.playRadio(103.);}
}

运行 MusicPlayerDemo 类的 main 方法,输出结果应为:

Playing CD: My Favorite Album
Stopping CD playback.
Turning off the radio.
Tuning radio to frequency: 103.Ⅲ

在这个示例中,MusicPlayerFacade 类作为外观角色,为 CDPlayer 和 Radio 子系统提供了简洁的接口,使得客户端无需直接与子系统交互,简化了系统的使用。

http://www.lryc.cn/news/334208.html

相关文章:

  • 蓝桥杯考前复习三
  • 极客时间: 用 Word2Vec, LangChain, Gemma 模拟全本地检索增强生成(RAG)
  • VBA操作Word
  • Linux文件IO(4):目录操作和文件属性获取
  • 【C语言】_文件类型,结束判定与文件缓冲区
  • YOLOV8注意力改进方法:DoubleAttention(附代码)
  • 每日一题 --- 前 K 个高频元素[力扣][Go]
  • Rust所有权和Move关键字使用和含义讲解,以及Arc和Mutex使用
  • 【YOLOV5 入门】——构建自己的数据集模型训练模型检验
  • MacBook 访达使用技巧【mac 入门】
  • 常见溯源,反溯源,判断蜜罐手段
  • 蓝桥杯刷题-09-三国游戏-贪心⭐⭐⭐
  • Windows编译运行TensorRT-YOLOv9 (C++)
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • 聊聊Linux内核中内存模型
  • docker自动化部署示例
  • Redis精品案例解析:Redis实现持久化主要有两种方式
  • Python | Leetcode Python题解之第14题最长公共前缀
  • 烧坏两块单片机,不知道原因?
  • SV学习笔记(八)
  • Java反射常用方法
  • go语言实现无头单向链表
  • SpringBoot快速入门笔记(5)
  • solidity(3)
  • 笔记 | 编译原理L1
  • k8s存储卷 PV与PVC 理论学习
  • 【WPF应用32】WPF中的DataGrid控件详解与示例
  • numpy,matplotilib学习(菜鸟教程)
  • Web API(四)之日期对象节点操作js插件重绘和回流
  • 27.WEB渗透测试-数据传输与加解密(1)