适配器模式例子

一、概念

将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。

二、设计角色

目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。
需要适配的类(Adaptee):需要适配的类或适配者类。
适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。

三、UML类图

这里写图片描述

例子:

/*
 * 目标类
 */
public class Target {
    public void sayWho(){
        System.out.println("this is common object!");
    }
}

/*
 * 需要适配的类
 */
public class Adaptee {

    public void specSayWho(){
        System.out.println("this is special object!");
    }
}

/*
 * 适配器
 */
public class Adapter extends Target{

    Adaptee adp = new Adaptee();

    @Override
    public void sayWho() {
        adp.specSayWho();
    }
}

/*
 * 客户端
 */
public class App {
    public static void main(String[] args) {
        Target adp = new Adapter();
        adp.sayWho();
    }
}

原文地址:http://www.cnblogs.com/wangjq/archive/2012/07/09/2582485.html

适配器模式是一种结构型设计模式,它允许将不兼容的对象包装在适配器中,以便它们可以一起工作。下面是一个简单的 Java 适配器模式例子: ``` public interface MediaPlayer { public void play(String audioType, String fileName); } public interface AdvancedMediaPlayer { public void playVlc(String fileName); public void playMp4(String fileName); } public class VlcPlayer implements AdvancedMediaPlayer{ @Override public void playVlc(String fileName) { System.out.println("Playing vlc file. Name: "+ fileName); } @Override public void playMp4(String fileName) { //do nothing } } public class Mp4Player implements AdvancedMediaPlayer{ @Override public void playVlc(String fileName) { //do nothing } @Override public void playMp4(String fileName) { System.out.println("Playing mp4 file. Name: "+ fileName); } } public class MediaAdapter implements MediaPlayer { AdvancedMediaPlayer advancedMusicPlayer; public MediaAdapter(String audioType){ if(audioType.equalsIgnoreCase("vlc") ){ advancedMusicPlayer = new VlcPlayer(); } else if (audioType.equalsIgnoreCase("mp4")){ advancedMusicPlayer = new Mp4Player(); } } @Override public void play(String audioType, String fileName) { if(audioType.equalsIgnoreCase("vlc")){ advancedMusicPlayer.playVlc(fileName); } else if(audioType.equalsIgnoreCase("mp4")){ advancedMusicPlayer.playMp4(fileName); } } } public class AudioPlayer implements MediaPlayer { MediaAdapter mediaAdapter; @Override public void play(String audioType, String fileName) { //播放 mp3 音乐文件的内置支持 if(audioType.equalsIgnoreCase("mp3")){ System.out.println("Playing mp3 file. Name: " + fileName); } //mediaAdapter 提供了播放其他文件格式的支持 else if(audioType.equalsIgnoreCase("vlc") || audioType.equalsIgnoreCase("mp4")){ mediaAdapter = new MediaAdapter(audioType); mediaAdapter.play(audioType, fileName); } else{ System.out.println("Invalid media. " + audioType + " format not supported"); } } } public class AdapterPatternDemo { public static void main(String[] args) { AudioPlayer audioPlayer = new AudioPlayer(); audioPlayer.play("mp3", "beyond the horizon.mp3"); audioPlayer.play("mp4", "alone.mp4"); audioPlayer.play("vlc", "far far away.vlc"); audioPlayer.play("avi", "mind me.avi"); } } ``` 在这个例子中,我们有一个 `MediaPlayer` 接口,它定义了一个 `play` 方法,用于播放音频文件。我们还有一个 `AdvancedMediaPlayer` 接口,它定义了两个方法,用于播放 Vlc 和 Mp4 文件。我们实现了这两个接口的具体类 `VlcPlayer` 和 `Mp4Player`。 然后我们创建了一个适配器类 `MediaAdapter`,它实现了 `MediaPlayer` 接口,并包装了 `AdvancedMediaPlayer` 接口的实现类。最后,我们创建了一个 `AudioPlayer` 类,它实现了 `MediaPlayer` 接口,并在需要时使用 `MediaAdapter` 类来播放不同类型的音频文件。 在 `main` 方法中,我们创建了一个 `AudioPlayer` 对象,并使用它来播放不同类型的音频文件。如果文件类型是 mp3,它将直接播放,如果是 vlc 或 mp4,它将使用 `MediaAdapter` 类来播放。如果文件类型不受支持,它将输出一条错误消息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值