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

2024-04-18 13:05:03 浏览数 (2)

前言

在软件开发的世界里,设计模式如同一本精妙的编码诗集,已经成为一种标准的编程实践。在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.pngimage.png

结语

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

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

0 人点赞