千家信息网

Java外观模式示例分析

发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,本篇内容介绍了"Java外观模式示例分析"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!定义外观模式为
千家信息网最后更新 2025年02月02日Java外观模式示例分析

本篇内容介绍了"Java外观模式示例分析"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

    定义

    外观模式为多个复杂的子系统,提供了一个一致的界面,使得调用端只和这个接口发生调用,而无须关系这个子系统内部的细节

    案例

    需求

    看电影的时候需要进行一系列的操作,比如打开播放器,放下屏幕,打开投影仪,打开音响等,这个要怎么进行管理呢

    方案:外观模式实现

    定义播放器类

    public class Player {    private static Player player = new Player();    private Player(){}    public static Player getInstance(){        return player;    }    public void on(){        System.out.println("打开播放器");    }    public void off(){        System.out.println("关闭播放器");    }    public void play(){        System.out.println("使用播放器播放电影");    }    public void pause(){        System.out.println("暂停播放器");    }    public void select(){        System.out.println("选择喜欢的电影");    }}

    定义投影仪类

    public class Projector {    private static Projector projector = new Projector();    private Projector(){}    public static Projector getInstance(){        return projector;    }    public void on(){        System.out.println("放下屏幕,打开投影仪");    }    public void off(){        System.out.println("关闭投影仪");    }    public void focus(){        System.out.println("调节投影仪焦距");    }    public void zoom(){        System.out.println("投影仪变焦");    }}

    定义音响类

    public class Stereo {    private static Stereo stereo = new Stereo();    private Stereo(){}    public static Stereo getInstance(){        return stereo;    }    public void on(){        System.out.println("打开音响");    }    public void off(){        System.out.println("关闭音响");    }    public void setVolume(){        System.out.println("调节音响音量");    }}

    定义爆米花机类

    /** * 爆米花机 * @author:liyajie * @createTime:2022/3/2 14:24 * @version:1.0 */public class Popcorn {    private static Popcorn popcorn = new Popcorn();    private Popcorn(){}    public static Popcorn getInstance(){        return popcorn;    }    public void on(){        System.out.println("打开爆米花机");    }    public void off(){        System.out.println("关闭爆米花机");    }    public void pop(){        System.out.println("制作爆米花");    }}

    定义家庭影院外观类

    public class HomeTheaterFacade {    // 聚合各个子系统    private Player player;    private Popcorn popcorn;    private Projector projector;    private Stereo stereo;    public HomeTheaterFacade(){    }    // 全参构造器    public HomeTheaterFacade(Player player, Popcorn popcorn,Projector projector,Stereo stereo){        this.player = player;        this.popcorn = popcorn;        this.projector = projector;        this.stereo = stereo;    }    // 准备阶段    public void ready(){        popcorn.on();        player.on();        projector.on();        stereo.on();    }    // 播放    public void play(){        player.select();        popcorn.pop();        projector.focus();        stereo.setVolume();    }    // 结束    public void end(){        player.off();        popcorn.off();        projector.off();        stereo.off();    }}

    定义测试类

    public class Test {    public static void main(String[] args) {        HomeTheaterFacade homeTheaterFacade = new HomeTheaterFacade(Player.getInstance(),Popcorn.getInstance(),Projector.getInstance(),Stereo.getInstance());        homeTheaterFacade.ready();        homeTheaterFacade.play();        homeTheaterFacade.end();    }}

    查看测试结果

    分析

    我们通过家庭影院外观类HomeTheaterFacade的ready,play,end方法操作了播放器,投影仪等的打开,关闭,对于家庭影院外观类来说,他是不需要知道播放器,投影仪等的打开,关闭具体是怎么样实现的。在一定程度上实现了解耦,易维护和扩展。

    总结

    优势:

    1.外观模式对外屏蔽了子系统的实现细节(安全性)

    2.外观模式降低了客户端与子系统交互的复杂性,对客户端和子系统进行解耦合,子系统内部的模块更容易维护和扩展

    3.通过合理的使用外观模式,可以帮助我们更好的划分访问层次

    使用场景

    1.对分层的系统进行构建时,使用外观模式可以简化子系统之间的依赖关系

    2.当有一个复杂的系统,里面有很多子系统,有大量的操作,这时候可以使用外观模式

    3.当客户端与多个子系统之间存在很多耦合时,引入外观模式,可以将他们分离,提高子系统的独立性和可移植性

    "Java外观模式示例分析"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

    0