java适配器模式 场景_基于JAVA的设计模式之适配器模式

适配器模式概念

适配器模式把一个类的接口变换成客户端所期待的另一个接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。比如我们突然就想看电影了,但是这个电影是AVI格式的,目前我们开发的Player播放器只能播放Mp4格式的,那么我们就得对这款落后的Player进行版本升级,通过Adapter适配器就可以实现既可以播放AVI格式的、也可以播放Mp4,这个适配器既可以播放原有的Mp4,也可以提供AVI接口。

Adapter:适配器

Adaptee:被适配的对象,就是Player

Target:客户端理想的接口,就是可以播Mp4,也可以播放AVI接口

类适配器类图

164350349_1_20190624094004750.png

类适配器代码

public interface TargetPlayer {

public void playMp4();

public void playAVI();

}

public class AdpateePlayer {

public void playMp4(){

System.out.println("can play mp4");

}

}

public class Adapter extends AdpateePlayer implements TargetPlayer {

public void playAVI() {

System.out.println("can play avi");

}

}

public class AdapterMain {

public static void main(String[] args) {

Adapter adapter=new Adapter();

adapter.playAVI();

adapter.playMp4();

}

}

对象适配器类图

164350349_2_20190624094005313.png

对象适配器代码

public interface TargetPlayer {

public void playMp4();

public void playAVI();

}

public interface AdapteePlayer {

public void playMp4();

}

public class AdapteePlayerImpl implements AdapteePlayer {

public void playMp4() {

System.out.println("can play mp4");

}

}

public class Adapter implements TargetPlayer{

private AdapteePlayer adapteePlayer;

public void setAdapteePlayer(AdapteePlayer adapteePlayer) {

this.adapteePlayer = adapteePlayer;

}

public void playMp4() {

adapteePlayer.playMp4();

}

public void playAVI() {

System.out.println("can play avi");

}

}

public class AdapterMain {

public static void main(String[] args) {

Adapter adapter=new Adapter();

AdapteePlayer adapteePlayer=new AdapteePlayerImpl();

adapter.setAdapteePlayer(adapteePlayer);

adapter.playAVI();

adapter.playMp4();

}

}

二者比较

小编为了突出对象适配器的好,将待适配器对象实现既写了接口又写了实现,很明显对象适配器很灵活,可以动态的传入不同的待适配的对象,而类适配器是静态的类继承,后期不可以修改,很死板。

应用场景

适配器作用就是讲一个接口适配到另一个接口,在Java 的I/O类库中有很多这样的需求,如将字符串数据转变成字节数据保存到文件中,将字节数据转变成流数据等。

以InputStreamReader和OutputStreamWriter类为例。

InputStreamReader和OutputStreamWriter类分别继承了Reader和writer接口,但是要创建他们的对象必须在构造函数中传入一个InputStream和OutputStream的实例,InputStreamReader和OutputStreamWriter类的作用也就是将InputStream和OutputStream适配到Reader和Writer。

适配器是InputStreamReader,源角色是InputStream代表的实例对象,目标接口就是Reader类。

InputStreamReader 将字节流转换为字符流。是字节流通向字符流的桥梁。如果不指定字符集编码,该解码过程将使用平台默认的字符编码,如:GBK。来源:https://www.icode9.com/content-1-263451.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值