前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java设计模式(8)外观模式

Java设计模式(8)外观模式

作者头像
Jensen_97
发布2024-04-18 13:05:03
1010
发布2024-04-18 13:05:03
举报
文章被收录于专栏:技术客栈技术客栈

前言

在软件开发的世界里,设计模式如同一本精妙的编码诗集,已经成为一种标准的编程实践。在Java编程中,设计模式很重要。是软件开发中广泛应用的一种编程方法,它可以帮助开发人员更快地编写出高效、可靠和可维护的代码。本人将制作一个关于Java设计模式的系列文章,总共23种设计模式将以一篇一篇文章讲解,代码笔记已开源:Gitee点击跳转。在上一篇《Java设计模式(7)装饰器模式》文章中,我们介绍了装饰器模式。本文是这个系列的第八篇章,我们将讲解一下外观模式的实现方式、应用场景以及它的用途。

外观模式

外观模式是一种结构型设计模式,提供一个统一的接口,用于访问子系统中的一组接口。隐藏了子系统的复杂性,为客户端提供了一个简单的接口,使得客户端不需要了解子系统的具体实现细节,降低系统的耦合性,并使得系统更易于维护和扩展。

使用场景

  1. 当存在一个复杂的子系统,并且希望为客户端提供一个简单的接口来访问该子系统时,可以使用外观模式。
  2. 当需要将子系统的接口进行封装,以隔离客户端与子系统之间的依赖关系时,也可以使用外观模式。
  3. 当需要简化一个复杂接口的使用,提供一个更加友好的接口给客户端时,外观模式同样适用。

代码实现

这里采用多媒体播放器来举个例子。首先是有一个媒体接口 Media

代码语言:javascript
复制
/**
 * 媒体接口
 * @author Jensen
 * @date 2024-01-31
 * */
public interface Media {
    void play();
}

随后创建 AudioPlayer 和 VideoPlayer 并实现于Media,表示这是两种不同媒体的具体操作:

代码语言:javascript
复制
/**
 * 音频类
 * @author Jensen
 * @date 2024-01-31
 * */
public class AudioPlayer implements Media {
    @Override
    public void play() {
        System.out.println("播放音频");
    }
}

代码语言:javascript
复制
/**
 * 视频类
 * @author Jensen
 * @date 2024-01-31
 * */
public class VideoPlayer implements Media {
    @Override
    public void play() {
        System.out.println("播放视频");
    }
}

随后再创建一个 MultimediaPlayerFacade 多媒体外观类,将 AudioPlayer 和 VideoPlayer 的初始化过程封装到一个简单的接口中

代码语言:javascript
复制
import com.nn.facade.impl.AudioPlayer;
import com.nn.facade.impl.VideoPlayer;

public class MultimediaPlayerFacade {
    private final Media audioPlayer;
    private final Media videoPlayer;

    public MultimediaPlayerFacade() {
        audioPlayer = new AudioPlayer();
        videoPlayer = new VideoPlayer();
    }
    // 提供简化接口给客户端
    public void playAudio() {
        audioPlayer.play();
    }

    public void playVideo() {
        videoPlayer.play();
    }
}

这样在使用当中只要在 MultimediaPlayerFacade 里直接拿接口数据就可以了,无需知道底层是怎样实现的

测试使用

代码语言:javascript
复制
System.out.println("------------------------------外观模式-----------------------------");
MultimediaPlayerFacade multimediaPlayerFacade = new MultimediaPlayerFacade();
multimediaPlayerFacade.playAudio();
multimediaPlayerFacade.playVideo();
image.png
image.png

结语

Spring中的很多组件都使用了外观模式来隐藏底层的复杂性。例如,Spring中的AOP提供了一个简单的接口,封装了底层的动态代理、拦截器等。还有Spring中的JDBC模块也提供了一个简单的接口,封装了与数据库操作相关的底层细节。

Java网络编程中的Socket类和ServerSocket类也是外观模式的应用,也是提供了一个简单的接口,封装了与网络通信相关的底层细节。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-03-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 外观模式
  • 使用场景
  • 代码实现
    • 测试使用
    • 结语
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档