本文主要是介绍外观模式(面子模式),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
外观模式
文章目录
- 外观模式
- 什么是外观模式
- 示例
什么是外观模式
外观模式(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 子系统提供了简洁的接口,使得客户端无需直接与子系统交互,简化了系统的使用。
这篇关于外观模式(面子模式)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!