• Java设计模式之外观模式


    定义

    又名门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。外观模式是“迪米特法则”的典型应用

    结构

    • 外观角色:为多个子系统对外提供一个共同的接口。
    • 子系统角色:实现系统的部分功能,客户可以通过外观角色访问它。

    案例

    智能家电控制

    子系统角色

    1. public class TV {
    2. public void on(){
    3. System.out.println("开电视");
    4. }
    5. public void off(){
    6. System.out.println("关电视");
    7. }
    8. }
    9. public class AirCondition {
    10. public void on(){
    11. System.out.println("开空调");
    12. }
    13. public void off(){
    14. System.out.println("关空调");
    15. }
    16. }
    17. public class Light {
    18. public void on(){
    19. System.out.println("开灯");
    20. }
    21. public void off(){
    22. System.out.println("关灯");
    23. }
    24. }

     外观角色

    1. public class Controller {
    2. private Light light;
    3. private AirCondition airCondition;
    4. private TV tv;
    5. public Controller() {
    6. this.light = new Light();
    7. this.airCondition = new AirCondition();
    8. this.tv = new TV();
    9. }
    10. public void control(String command){
    11. if (command.equals("打开")){
    12. light.on();
    13. tv.on();
    14. airCondition.on();
    15. }else if (command.equals("关闭")){
    16. light.off();
    17. tv.off();
    18. airCondition.off();
    19. }else{
    20. System.out.println("错误指令");
    21. }
    22. }
    23. }

    测试 

    1. public class Client {
    2. public static void main(String[] args) {
    3. Controller controller = new Controller();
    4. controller.control("打开");
    5. System.out.println("===========");
    6. controller.control("关闭");
    7. }
    8. }

    开灯

    开电视

    开空调

    ===========

    关灯

    关电视

    关空调

    只是实现了简单的一键开关,可以根据Controller中设置不同的子系统管理。

    好处

    • 降低了子系统与客户端之间的耦合度,使得子系统的变化不会影响调用它的客户类。
    • 对客户屏蔽了子系统组件,减少了客户处理的对象数目,并使得子系统使用起来更加容易。

    缺点

    • 不符合开闭原则,修改很麻烦

    使用场景

    • 对分层结构系统构建时,使用外观模式定义子系统中每层的入口点可以简化子系统之间的依赖关系。
    • 当一个复杂系统的子系统很多时,外观模式可以为系统设计一个简单的接口供外界访问。
    • 当客户端与多个子系统之间存在很大的联系时,引入外观模式可将它们分离,从而提高子系统的独立性和可移植性。
  • 相关阅读:
    R语言、02 案例2-1 Pelican商店、《商务与经济统计》案例题
    Linux Gnome桌面无法打开终端Terminal
    基于大规模MIMO通信系统的半盲信道估计算法matlab性能仿真
    Java大数 -- BigInteger类
    【线性代数】【一】1.2 消元法与方程组的矩阵表示
    Dubbo-Dubbo 动态配置中心
    并发、并行、同步、异步、阻塞、非阻塞
    matplotlib笔记
    Rust 基础
    [论文阅读笔记15]GNN在多目标跟踪中的应用
  • 原文地址:https://blog.csdn.net/zmbwcx/article/details/133966468