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

文章目录

一、结构型设计模式

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

结构型设计模式包括:适配器模式 (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的特性,并在内部做相应的转换即可,提高了系统的可扩展性。

相关推荐
等一场春雨1 小时前
Java设计模式 十四 行为型模式 (Behavioral Patterns)
java·开发语言·设计模式
小王子10243 小时前
设计模式Python版 单例模式
python·单例模式·设计模式
_DCG_4 小时前
c++常见设计模式之装饰器模式
c++·设计模式·装饰器模式
快乐非自愿4 小时前
「全网最细 + 实战源码案例」设计模式——单例设计模式
java·单例模式·设计模式
阿绵4 小时前
设计模式-模板方法实现
java·开发语言·设计模式
晚秋贰拾伍4 小时前
设计模式的艺术-职责链模式
运维·设计模式·运维开发·责任链模式·开闭原则·单一职责原则
博一波4 小时前
【设计模式-行为型】状态模式
设计模式·状态模式
w(゚Д゚)w吓洗宝宝了4 小时前
设计模式概述 - 设计模式的重要性
c++·设计模式
Cikiss4 小时前
「全网最细 + 实战源码案例」设计模式——工厂方法模式
java·后端·设计模式·工厂方法模式
zhulangfly5 小时前
【Java设计模式-7】责任链模式:我是流水线的一员
java·设计模式·责任链模式