适配器模式中分为类适配器和对象适配器。
类适配器
继承手头现在有的类,通过调用父类(现有类)的方法来实现客户端需要的接口。
客户端想要的接口:
package com.oozinoz.simulation;
/**
* 火箭模拟
* 这是一个客户端已经使用的接口
*/
public interface RocketSim {
double getMass();
double getThrust();
void setSimTime(double t);
}
手头现有的实现:
package com.oozinoz.physical;
/**
* 手头上已经有的火箭实现
*/
public class PhysicalRocket {
double burnArea;
double burnRate;
double fuelMass;
double totalMass;
public PhysicalRocket(double burnArea, double burnRate, double fuelMass,double totalMass) {
this.burnArea = burnArea;
this.burnRate = burnRate;
this.fuelMass = fuelMass;
this.totalMass = totalMass;
}
public double getBurnTime(){
//一些具体实现...
return 0d;
}
public double getMass(double t){
//...
return 0d;
}
public double getThrust(double t){
//...
return 0d;
}
}
通过继承的方式来适配:
package com.oozinoz.firework;
import com.oozinoz.physical.PhysicalRocket;
import com.oozinoz.simulation.RocketSim;
/**
* 适配器
* 继承现有类,实现客户端接口,将现有实现包装(适配)成客户端想要调用的接口
*/
public class OozinozRocket extends PhysicalRocket implements RocketSim {
private double time;
public OozinozRocket(double burnArea, double burnRate, double fuelMass,double totalMass) {
super(burnArea,burnRate,fuelMass,totalMass);
}
@Override
public double getMass() {
return getMass(time);
}
@Override
public double getThrust() {
return getThrust(time);
}
@Override
public void setSimTime(double t) {
this.time = t;
}
}
对象适配器
对象适配器和类适配器不同的是,不通过继承的方式来调用现有的实现,而是通过包装一个现有类对象,调用这个对象的方法来使用现有的实现。
package com.oozinoz.simulation;
import com.oozinoz.physical.PhysicalRocket;
public class OozinozRocket implements RocketSim{
private double time;
private PhysicalRocket rocket;
public OozinozRocket(double burnArea, double burnRate, double fuelMass,double totalMass) {
rocket = new PhysicalRocket(burnArea, burnRate, fuelMass, totalMass);
}
@Override
public double getMass() {
return rocket.getMass(time);
}
@Override
public double getThrust() {
return rocket.getThrust(time);
}
@Override
public void setSimTime(double t) {
this.time = t;
}
}
Java的IO流API是最好的适配器实现,适配器模式和装饰模式比较相似。适配器模式侧重于适配新的接口,而装饰模式则侧重于对已有对象的扩展。
分享到:
相关推荐
23种设计模式的java实现,Adaper
适配器(Adaper)角色public class Adapter extends Adaptee implements Target { /** * 由于源类
A_FactoryMethod、B_AbstractFactory、C_Singleton、D_Builder、E_Prototype、F_Adaper、G_Decorator、H_Proxy、I_Facade、J_Bridge、K_Composite、L_Flyweight、M_Strategy、N_TemplateMethod、O_Observer、P_...
适用于android中列表适配器,列表绑定数据
Demo对应文章地址:http://blog.csdn.net/wolinghuanyun?viewmode=contents
内建网络装置开机功能(Internal Network Adaper Boot)”将之停用(Disable),然后按F10保存后重新启动。 以后再插着网线也可以正常关机了。 方法二:原来在网卡设置方面有相关选项:我的电脑——属性——硬件——...
ChatterBot每个部分都设计了不同的"适配器"(Adapter),分为逻辑适配器和存储适配 器。逻辑适配器确定ChatterBot如何选择对给定输⼊语句的响应的逻辑,包括:最佳匹配适配器、时间逻辑适配器、数学评估适配器、特 定...
mtconnect-adapter all version for fanuc
黑苹果USB万能网卡驱动,支持多达白款USB网卡 最新版本,下载解压安装完成重启,同时USB网卡必须在开机时插上在开机,进到系统在插网卡多数不会被识别
U-EC5使用手册 鉴于最近好多网友询问C8051F调试器之间的区别:做以下说明,市场当前主要有三种,即EC3、EC5(两个版本)、EC6,而这些开发器的内核都是源于的Silabs的USB Deubg Adaper
介绍了关于ControNet光纤中继器模块安装指南的详细说明,提供其他AB产品的技术资料的下载。
W2k8R2_7JWVC_6.602.12.00_A00_ZPE 适用于PERC H330/H730/H730P/H830控制器的Windows 2008 R2驱动程序 、 W2012_3GRCY_6.602.12.00_A00_ZPE 适用于PERC H330/H730/H730P/H830控制器的Windows 212 驱动程序、 ...
UVM RAL Adapter With the UVM Register model, we do design register access, i.e WRITE to the design register or READ from the design register by calling RAL methods. Finally, these transactions ...
富蒂斯USB2.0免驱百兆网卡驱动 USB 2.0 100Mbps Ethernet Network Adapter USB 2.0 免驱百兆网卡 SR9900 纯净安装包,原盘拷贝。
RecyclerView 加载 adaper中创建并且加载布局 在activity 中调用adapter 的方法更新或者设置数据
目前画廊效果基本上都是使用gallery方式,loft使用viewpager实现了这个效果,更加流畅,而且代码更加简洁,不用去处理scroll中adaper item的变化
IP camera adapter 64位版本 一个虚拟摄像头驱动软件 可以把视频流虚拟成模拟摄像头。在NI机器视觉识别开发时,手机上安装smart webcam或其他,可以把手机用作摄像头用,官网有时在国内无法登陆,特意去国外一趟下载...