2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Das Fassadenentwurfsmuster, auch Erscheinungsmuster genannt, ist ein strukturelles Entwurfsmuster. Es wird hauptsächlich verwendet, um eine einheitliche Schnittstelle auf hoher Ebene für eine Reihe von Schnittstellen in einem Subsystem bereitzustellen und so die Verwendung des Subsystems zu vereinfachen. Im Folgenden finden Sie eine detaillierte Einführung in das Fassadenentwurfsmuster:
Das Fassadenmuster bietet eine externe Schnittstelle für mehrere komplexe Subsysteme und erleichtert so den Zugriff auf diese Subsysteme. Dieser Modus verfügt über eine einheitliche Schnittstelle zur Außenwelt, und externe Anwendungen müssen sich nicht um die internen Details des Subsystems kümmern, wodurch die Komplexität der Anwendung erheblich reduziert und die Wartbarkeit verbessert wird.
Klassen Diagramm:
Der Fassadenmodus umfasst hauptsächlich die folgenden drei Rollen:
In einem Heimkinosystem kann der Fassadenmodus verwendet werden, um die Benutzerbedienung zu vereinfachen. Beispielsweise müssen Benutzer nur eine Fernbedienung (Facade-Klasse) verwenden, um Projektoren, Lautsprecher, DVD-Player und andere Geräte (Subsysteme) zu steuern, ohne diese Geräte separat bedienen zu müssen.
- // 投影仪接口
- interface Projector {
- void on();
- void off();
- void focus();
- void wideScreenMode();
- }
-
- // 投影仪实现类
- class SimpleProjector implements Projector {
- @Override
- public void on() {
- System.out.println("Projector is on");
- }
-
- @Override
- public void off() {
- System.out.println("Projector is off");
- }
-
- @Override
- public void focus() {
- System.out.println("Adjusting projector focus");
- }
-
- @Override
- public void wideScreenMode() {
- System.out.println("Switching to wide screen mode");
- }
- }
-
- // DVD播放器接口
- interface DVDPlayer {
- void on();
- void off();
- void play();
- void stop();
- void pause();
- void eject();
- void setTwoChannelAudio();
- void setSurroundAudio();
- }
-
- // DVD播放器实现类
- class SimpleDVDPlayer implements DVDPlayer {
- @Override
- public void on() {
- System.out.println("DVD Player is on");
- }
-
- @Override
- public void off() {
- System.out.println("DVD Player is off");
- }
-
- @Override
- public void play() {
- System.out.println("DVD Player is playing");
- }
-
- @Override
- public void stop() {
- System.out.println("DVD Player stopped");
- }
-
- @Override
- public void pause() {
- System.out.println("DVD Player paused");
- }
-
- @Override
- public void eject() {
- System.out.println("DVD ejected");
- }
-
- @Override
- public void setTwoChannelAudio() {
- System.out.println("Stereo mode is on");
- }
-
- @Override
- public void setSurroundAudio() {
- System.out.println("Surround sound mode is on");
- }
- }
-
- // 音响接口
- interface Amplifier {
- void on();
- void off();
- void setStereoSound();
- void setSurroundSound();
- void setVolume(int volume);
- }
-
- // 音响实现类
- class StereoAmplifier implements Amplifier {
- @Override
- public void on() {
- System.out.println("Amplifier is on");
- }
-
- @Override
- public void off() {
- System.out.println("Amplifier is off");
- }
-
- @Override
- public void setStereoSound() {
- System.out.println("Stereo mode is on");
- }
-
- @Override
- public void setSurroundSound() {
- System.out.println("Surround sound mode is on");
- }
-
- @Override
- public void setVolume(int volume) {
- System.out.println("Setting volume to " + volume);
- }
- }
-
- // 家庭影院Facade类
- class HomeTheaterFacade {
- private Projector projector;
- private DVDPlayer dvdPlayer;
- private Amplifier amplifier;
-
- public HomeTheaterFacade(Projector projector, DVDPlayer dvdPlayer, Amplifier amplifier) {
- this.projector = projector;
- this.dvdPlayer = dvdPlayer;
- this.amplifier = amplifier;
- }
-
- // 提供一个简单的方法来观看电影
- public void watchMovie(String movie) {
- System.out.println("Get ready to watch a movie...");
-
- projector.on();
- projector.wideScreenMode();
-
- amplifier.on();
- amplifier.setSurroundSound();
- amplifier.setVolume(5);
-
- dvdPlayer.on();
- dvdPlayer.play(movie);
-
- System.out.println("Enjoy the movie...");
- }
-
- // 提供一个简单的方法来结束观看
- public void endMovie() {
- System.out.println("Shutting movie theater down...");
-
- projector.off();
- amplifier.off();
- dvdPlayer.stop();
- dvdPlayer.eject();
- dvdPlayer.off();
- }
- }
-
- class Client{
- public static void main(String[] args) {
- Projector projector = new SimpleProjector();
- DVDPlayer dvdPlayer = new SimpleDVDPlayer();
- Amplifier amplifier = new StereoAmplifier();
- HomeTheaterFacade homeTheaterFacade = new HomeTheaterFacade(projector,dvdPlayer,amplifier);
- homeTheaterFacade.watchMovie("肖申克的救赎");
- homeTheaterFacade.endMovie();
- }
- }
In diesem Beispiel sehen Sie den Fassadenmodus, der sich besonders dazu eignet, mit mehreren Komponenten feste Prozesse zusammenzustellen und die Komplexität von Client-Aufrufen zu reduzieren.
Das Fassadenentwurfsmuster ist ein sehr praktisches Entwurfsmuster, das die Systemkomplexität reduziert und die Benutzerfreundlichkeit und Flexibilität des Systems verbessert, indem es eine einheitliche Schnittstelle für Subsysteme bereitstellt. Allerdings müssen Sie sich bei der Verwendung dieses Modells auch über mögliche Mängel und Risiken im Klaren sein.
Wenn dieser Modus für Sie nützlich ist, denken Sie daran, ihn zu liken und zu sammeln.