• java 实现外观模式


    外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个简化的接口,用于访问一组相关的接口或子系统。外观模式的主要目的是隐藏复杂的系统结构,提供一个更简单的接口供客户端使用。以下是一个简单的Java示例,演示如何实现外观模式:

    首先,假设我们有一个音响系统,它包含了多个子系统,如音响、DVD播放器和投影仪。每个子系统都有自己的方法和状态。

    // 子系统1:音响
    public class StereoSystem {
        public void turnOn() {
            System.out.println("Stereo System is ON");
        }
    
        public void turnOff() {
            System.out.println("Stereo System is OFF");
        }
    }
    
    // 子系统2:DVD播放器
    public class DVDPlayer {
        public void play() {
            System.out.println("DVD Player is playing");
        }
    
        public void stop() {
            System.out.println("DVD Player is stopped");
        }
    }
    
    // 子系统3:投影仪
    public class Projector {
        public void turnOn() {
            System.out.println("Projector is ON");
        }
    
        public void turnOff() {
            System.out.println("Projector is OFF");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    接下来,我们创建一个外观类 HomeTheaterFacade,它提供了一个简单的接口,封装了所有子系统的操作:

    public class HomeTheaterFacade {
        private StereoSystem stereoSystem;
        private DVDPlayer dvdPlayer;
        private Projector projector;
    
        public HomeTheaterFacade() {
            this.stereoSystem = new StereoSystem();
            this.dvdPlayer = new DVDPlayer();
            this.projector = new Projector();
        }
    
        public void watchMovie() {
            System.out.println("Get ready to watch a movie...");
            stereoSystem.turnOn();
            dvdPlayer.play();
            projector.turnOn();
        }
    
        public void endMovie() {
            System.out.println("Movie is over. Shutting down...");
            projector.turnOff();
            dvdPlayer.stop();
            stereoSystem.turnOff();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    现在,客户端可以通过使用 HomeTheaterFacade 来操作整个家庭影院系统,而无需了解每个子系统的细节:

    public class FacadePatternDemo {
        public static void main(String[] args) {
            HomeTheaterFacade homeTheater = new HomeTheaterFacade();
    
            // 开始观影
            homeTheater.watchMovie();
    
            // 结束观影
            homeTheater.endMovie();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    使用外观模式,客户端代码变得更简单,因为它不必了解复杂的子系统结构和操作。外观模式提供了一个更高级别的接口,使得系统更易于使用和维护。

  • 相关阅读:
    02 - QT 自定义控件封装
    overflow: auto滚动条跳到指定位置
    Linux多线程(线程池与单例模式)
    文本特征提取专题_以python为工具【Python机器学习系列(十二)】
    YOLOV5/YOLOV7/YOLOV8改进:用于低分辨率图像和小物体的新 CNN 模块SPD-Conv
    作业2 计算文件长度和行数
    vue项目升级vue3中小坑记录
    Discuz IIS上传附件大于28M失败报错Upload Failed.修改maxAllowedContentLength(图文教程)
    论文笔记 A Comprehensive Survey on Graph Neural Networks(GNN综述)
    Socks5代理和代理IP:网络工程师的多面利器
  • 原文地址:https://blog.csdn.net/sunyuhua_keyboard/article/details/132673158