设计模式-结构型模式之适配器设计模式

文章目录

一、结构型设计模式

这篇文章我们来讲解下结构型设计模式,结构型设计模式,主要处理类或对象的组合关系,为如何设计类以形成更大的结构提供指南。

结构型设计模式包括:适配器模式 (Adapter Pattern)、桥接模式 (Bridge Pattern)、组合模式 (Composite Pattern)、装饰器模式 (Decorator Pattern)、外观模式 (Facade Pattern)、享元模式 (Flyweight Pattern)、代理模式(Proxy Pattern)

在本文中主要介绍 适配器、桥接、组合、享元四种设计模式,下篇文章为讲解 外观、代理、 装饰器 。

二、适配器模式

适配器模式 (Adapter Pattern)是作为两个不兼容的接口之间的桥梁。它结合了两个独立接口的功能。

优点:

  1. 可以让任何两个没有关联的类一起运行。
  2. 提高了类的复用。
  3. 增加了类的透明度。
  4. 灵活性好。

这种模式涉及到一个单一的类 ,该类负责加入独立的或不兼容的接口功能。举个真实的例子,在视频播放器中,假设视频播放器只能播放MP4格式的视频,那现在又有个VLC格式的视频,就不能播放了,那要如何解决这个问题?如果我们做个转换器,将VLC格式的视频转换为MP4格式的视频不就可以播放了吗,那这个转换器我们就可以采用适配器设计模式来设计。

下面使用程序演示下上面的例子:

  1. 定义视频接口
java 复制代码
public interface VideoInterFace {
    String getVideoPath();
}
  1. 定时Mp4格式视频实例
java 复制代码
public class Mp4Video implements VideoInterFace {
    @Override
    public String getVideoPath() {
        return "Mp4视频的路径";
    }
}
  1. 定义VLC格式视频实例
java 复制代码
public class VlcVideo implements VideoInterFace{
    @Override
    public String getVideoPath() {
        return "Vlc视频的路径";
    }
}
  1. 定义播放器,只接口Mp4格式的视频
java 复制代码
public class Player {
    private Mp4Video video;

    public Player(Mp4Video video) {
        this.video = video;
    }

    public void play() {
        System.out.println(StringFormatter.concat("播放视频视频地址:", video.getVideoPath()).getValue());
    }
}
  1. 需要播放VLC格式的视频,定义Mp4的适配器,并接收VLC格式视频,进行转码。
java 复制代码
public class Mp4Adapter extends Mp4Video {

    private VlcVideo vlcVideo;

    public Mp4Adapter(VlcVideo vlcVideo) {
        this.vlcVideo = vlcVideo;
    }

    @Override
    public String getVideoPath() {
        System.out.println(StringFormatter.concat("开始格式转换,vlc地址:", vlcVideo.getVideoPath()).getValue());
        return "转换后的Mp4路径!";
    }
}
  1. 测试
java 复制代码
public class demo {
    public static void main(String[] args) {
        Player player = new Player(new Mp4Video());
        player.play();

        VlcVideo vlcVideo = new VlcVideo();
        Player player1 = new Player(new Mp4Adapter(vlcVideo));
        player1.play();
    }
}

从上面的例子可以看出,需要播放VLC格式,就需要写一个目标适配器,这里是Mp4适配器,并继承Mp4,使之有Mp4的特性,并在内部做相应的转换即可,提高了系统的可扩展性。

相关推荐
wenbin_java3 小时前
设计模式之解释器模式:原理、实现与应用
java·设计模式·解释器模式
-权子-5 小时前
设计模式 - 代理模式Proxy
设计模式·代理模式
StrongerLLL5 小时前
策略模式
设计模式
程序员沉梦听雨7 小时前
适配器模式详解
设计模式·适配器模式
01空间7 小时前
设计模式简述(二)单例模式
设计模式
渊渟岳8 小时前
为什么学习设计模式?
设计模式
程序员JerrySUN13 小时前
设计模式 Day 3:抽象工厂模式(Abstract Factory Pattern)详解
设计模式·抽象工厂模式
程序员沉梦听雨15 小时前
原型模式详解
设计模式·原型模式
coderzpw16 小时前
谁该处理我的请假?——责任链模式
设计模式·责任链模式
云徒川18 小时前
【设计模式】组合模式
设计模式·组合模式