Java结构型设计模式-适配器(一)
来源:互联网 发布:变性手术知乎 编辑:程序博客网 时间:2024/04/29 19:04
什么是适配器模式?
定义
适配器(Adapter):适配器模式将某个类的接口(Source)转换成客户端期望的另一个接口(Target)表示,主的目的是兼容性,使接口不兼容的两个类协同工作。其别名为包装器(Wrapper)。
简单来说就是,Source类以某种形式类型给到Adapter类,然后Adapter类的接口与Target接口兼容,将Source类形式类型表现出再Target里。
过程可以简述成:Source->Adapter->Targetable。
比如我们的RecycleView的接口情况来说,RecycleView的接口需要的是视图View(Targetable),而我们得到的一般是数据data(Source),所以我们的Adapter适配器将数据data(Source)转换成ItemView(View)的工作。
分为三类:类的适配器模式,对象的适配器模式和接口的适配器模式。
使用场景:
1 系统需要使用现有的类,而这些类的接口不符合系统的需要。
2 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。
3 需要一个统一的输出接口,而输入端的类型不可预知。
类适配器模式
Adapter类,通过继承Source类获得类的某种类型表现形式,实现在Adapter类中进行转换成Target的接口。
用生活的例子手机充电器来讲解,220V交流电相当于Source类,5V直流电相当Target类,而充电器就相当Adapter类。
类图
Source类
public class Source{ public int output220V() { return 220; }}
Target接口
public interface Target{ public int Voltage5V();}
Adapter类
public class Adapter extends Source implements Target{ @Override public int Voltage5V () { return output220V()/44; }}
Client类
public class Client{ public static void main(String[] args) { Target target = new Adapter(); System.out.println(target.Voltage5V()+"V"); }}
output:
5V
总结:
1.由于Java是单继承机制,所以我们尽量优先使用接口。
2.此模式要求Target类必须是接口,具有一定的局限性。
3.Source类中的方法全在Adapter中暴露,增加使用成本。
4.由于继承了Source类,可以根据需求重写Source类方法,增加了Adapter类的灵活性。
对象适配器模式(常用)
思路和类适配器相同,不继承Source类,获得Source的实例,
用生活的例子手机充电器来讲解,220V交流电相当于Source类,5V直流电相当Target类,而充电器就相当Adapter类。
类图
Source类
public class Source{ public int output220V() { return 220; }}
Target接口
public interface Target{ public int Voltage5V();}
Adapter类
public class Adapter extends Source implements Target{ @Override public int Voltage5V () { return output220V()/44; }}
Client类
public class Client{ public static void main(String[] args) { Target target = new Adapter(); System.out.println(target.Voltage5V()+"V"); }}
output:
5V
接口的适配器模式(常用)
也称缺省适配器模式(Default Adapter Pattern)
当接口实现的方法都相同或不需要实现接口的所有方法时,可设计一个抽象类(AbstractSimpleClass),并为每个类默认实现方法或置空方法,那么抽象类可有选择地覆盖父类的方法来实现需求,这样大大增加了程序的简洁性和减少了工作量。
例如我们使用RxJava2的时候,实现观察者方法的时候总是会有四个接口方法需要实现,其中onSubscribe方法我们不怎么操作,可以置为空,而onError方法可以Log打印出错误信息,onComplete方法Toast出完成的信息。
源码
public class AbstractSimpleClass{ public abstract static class Next< T > implements Observer< T > { @Override public void onSubscribe ( Disposable d ) { } @Override public void onError ( Throwable e ) { LogUtils.d(e.toString()); } @Override public void onComplete () { ToastUtils.showShort("Complete"); } }}
未使用接口适配器的代码
使用接口适配器的代码
1 0
- Java结构型设计模式-适配器(一)
- java设计模式(结构型)之适配器模式
- Java设计模式(6)结构型:适配器模式
- 适配器模式(结构型设计模式)
- 适配器模式(结构型设计模式)
- 设计模式 一 适配器模式 Adapter(结构型模式)
- 结构型设计模式(一)(适配器模式,桥接模式,组合模式,装饰模式)
- (结构型模式一)适配器模式
- 一起学java设计模式--适配器模式(结构型模式)
- 设计模式--结构模式--适配器模式--Java
- 结构型设计模式---适配器
- 设计模式-结构型-适配器
- java语言实现结构型设计模式—适配器模式
- JAVA设计模式(6) —<结构型>适配器模式(Adapter)
- java设计模式——结构型之适配器模式
- Java设计模式之适配器模式Adapter(结构型)
- Java设计模式_(结构型)_适配器模式
- java结构型设计模式——适配器模式
- 质数相关
- POJ 2109做题笔记#贪心#
- 开启VNC的时候mesg: ttyname failed: Inappropriate ioctl for device
- 数列排序
- 新年重磅! flowchart可视化流程图编程语言发布
- Java结构型设计模式-适配器(一)
- 伸展树(排列变换,uva 11922)
- 字符串空格处理
- Gradle出现Could not create task of type 'DependencyManagementReportTask'
- 1073.Scientific Notation (20)
- gradle连接shadowsock代理
- java NIO socket编程简介
- 二项堆 数据结构说解
- 连接文件