Java设计模式之适配器模式
2018-02-02 09:37
375 查看
1、适配器模式
1.1原理
适配器模式中的角色目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。
需要适配的类(Adaptee):需要适配的类或适配者类。
适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。
现方式主要有两种:
类的适配器模式(采用继承实现)
对象适配器(采用对象组合方式实现)
1.2 类的适配器(类的继承)
(1)目标接口/** * 目标接口,也就是我们期望的接口 * @author hadron * */ public interface Target { //普通功能 public void request(); }
(2)已有功能类
/** * 已存在的、具有特殊功能、但不符合我们的要求 * @author hadron * */ public class Adaptee { public void specificRequest() { System.out.println("三孔插座"); } }
(3)适配器类
/** * 适配器类,继承了被适配类Adaptee,同时实现标准接口Target * @author hadron */ public class Adapter extends Adaptee implements Target{ @Override public void request() { System.out.println("适配器类:转换为双孔插座"); this.specificRequest(); } }
(4)Client
public class AdapterDemo { public static void main(String[] args) { Target adapter = new Adapter(); //通过适配器调用特殊功能 adapter.request(); } }
(5)运行结果
适配器类:转换为双孔插座 三孔插座
1.3 对象适配器(对象组合)
(1)适配器类/** * 适配器类,直接关联被适配类,同时实现标准接口 * 采用对象组合方式实现 * @author hadron * */ public class AdapterObject implements Target{ // 直接关联被适配类 private Adaptee adaptee; // 可以通过构造函数传入具体需要适配的被适配类对象 public AdapterObject(Adaptee adaptee) { this.adaptee = adaptee; } @Override public void request() { // 这里是使用委托的方式完成特殊功能 System.out.println("适配器类:转换为双孔插座"); this.adaptee.specificRequest(); } }
(2)Client
public class AdapterObjectDemo { public static void main(String[] args) { Target adapter = new AdapterObject(new Adaptee()); adapter.request(); } }
(3)运行结果
适配器类:转换为双孔插座 三孔插座
2、Java IO中的适配器模式
(1)Java IO适配器作用就是讲一个接口适配到另一个接口,在Java 的I/O类库中有很多这样的需求,如将字符串数据转变成字节数据保存到文件中,将字节数据转变成流数据等。
以InputStreamReader和OutputStreamWriter类为例。
InputStreamReader和OutputStreamWriter类分别继承了Reader和writer接口,但是要创建他们的对象必须在构造函数中传入一个InputStream和OutputStream的实例,InputStreamReader和OutputStreamWriter类的作用也就是将InputStream和OutputStream适配到Reader和Writer。适配器是InputStreamReader,源角色是InputStream代表的实例对象,目标接口就是Reader类。
(2)样例演示
package adapter; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; public class AdapterIO { public static void main(String[] args) throws Exception{ File f = new File("c:\\words.txt") ; //字节输入流 InputStream in=new FileInputStream(f); //将字节输入流转换为字符输入流(适配器模式) Reader reader = new InputStreamReader(in) ; //从Reader中最多读取1024个字符 char buffer[] = new char[1024] ; int len = reader.read(buffer) ; reader.close() ; // 关闭 System.out.println(new String(buffer,0,len)) ; } }
输出结果
相关文章推荐
- JAVA设计模式(适配器模式)
- JAVA设计模式(6) —<结构型>适配器模式(Adapter)
- java设计模式_适配器模式
- Java-设计模式-第二篇-适配器模式
- java设计模式:适配器模式
- Java设计模式-适配器模式
- Java设计模式之适配器模式
- Java设计模式 -- 适配器模式
- Java设计模式之适配器模式
- Java设计模式之适配器模式
- JAVA的23种设计模式---适配器模式
- java设计模式(结构型)之适配器模式
- 【java设计模式之建造者模式和适配器模式】
- Java设计模式 —— 适配器模式(Adapter)
- java设计模式:适配器模式[Apater]
- java 设计模式学习笔记(13) - 适配器模式
- java设计模式之十一:适配器模式
- Java设计模式 - 适配器模式
- Java设计模式之《适配器模式》及应用场景