`

设计模式-适配器(Adaper)模式

 
阅读更多

适配器模式中分为类适配器和对象适配器。

类适配器

继承手头现在有的类,通过调用父类(现有类)的方法来实现客户端需要的接口。

客户端想要的接口:

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种设计模式(5) java适配器模式

    在java适配器模式中,有三个重要的角色:目标(Target)角色、源(Adapee)角色和适配器(Adaper)角色。目标角色是我们所期待得到的接口,源角色是我们要使用的接口,但是这个接口不符合我们的要求,适配器角色是...

    23种设计模式的java实现_Adaper

    设计模式是软件工程中的一种最佳实践,用于解决常见的设计问题并提供可重用的解决方案。在Java编程中,设计模式的...通过对这些代码的学习和理解,你可以深入掌握适配器模式的原理和实践,进一步提升你的Java设计能力。

    java 23种设计模式demo源码【eclipse版】

    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中列表适配器,列表绑定数据

    本人blog文章Adaper源码分析以及陷阱演示Demo

    本篇文章通过Adaper源码分析以及陷阱演示Demo,旨在深入理解Adapter的工作原理,并避免在实际开发中可能遇到的问题。 首先,我们来探讨Adapter的基本结构。Adapter继承自BaseAdapter,其核心方法有四个:`getCount...

    PC_Adapter_USB(西门子原装)驱动程序.rar

    《PC_Adapter_USB(西门子原装)驱动程序》是一款专门为西门子品牌的USB转PC适配器设计的驱动软件。驱动程序是操作系统与硬件设备之间的重要桥梁,它的主要功能是使计算机能够识别和控制硬件设备,充分发挥硬件的功能...

    LSI 9240-8I RAID卡驱动 win2003/WIN2008/WIN2012 32位64位

    LSI 9240-8I RAID卡驱动 win2003/WIN2008/WIN2012 32位64位 LSI 9240-8I RAID卡驱动 win2003/WIN2008/WIN2012 32位64位 LSI 9240-8I RAID卡驱动 win2003/WIN2008/WIN2012 32位64位 LSI 9240-8I RAID卡驱动 win2003/...

    adapter.tar.gz_MTConnect Adapter_MTconnect_fanuc_fanuc adapter

    mtconnect-adapter all version for fanuc

    Apple USB Ethernet Adapter(苹果USB网卡驱动.zip

    这款驱动程序适用于多种Windows操作系统,包括Windows 10、Windows 8.1、Windows 7、Windows Vista以及Windows XP,旨在确保苹果USB以太网适配器在Windows环境下的正常运行。 首先,让我们深入了解一下驱动程序在...

    kotlin顶部导航栏(TabLayout+viewpager).zip

    在Android应用开发中,创建一个具有顶部导航栏的界面是一种常见的设计模式,它能帮助用户在多个视图间轻松切换。本项目以“Kotlin顶部导航栏(TabLayout+ViewPager)”为主题,提供了实现这一功能的示例代码,旨在...

    ibm p750 错误代码说明

    符号性FRU的设计使得即使是没有专业知识的技术人员也能够轻松识别并更换故障部件,大大提高了维护效率。 #### 三、使用说明 在使用IBM P750系列服务器的过程中,遇到错误代码时应首先参照官方文档中的解释进行诊断...

    Android listview自动换行

    在Android开发中,ListView是一种非常常见的控件,用于展示...在实际应用中,可能还需要结合具体需求进行优化,例如添加间距、处理不同屏幕尺寸等,但基本思路就是利用自定义布局和适配器来控制ListView的显示方式。

    U-EC5使用手册

    U-EC5使用手册 鉴于最近好多网友询问C8051F调试器之间的区别:做以下说明,市场当前主要有三种,即EC3、EC5(两个版本)、EC6,而这些开发器的内核都是源于的Silabs的USB Deubg Adaper

    ControNet光纤中继器模块安装指南

    ControlNet光纤中继器模块安装指南介绍的是如何正确安装和配置Allen-Bradley的ControNet中继器模块。ControNet是一种工业网络通讯协议,用于连接自动化设备和控制设备,支持实时数据交换。ControNet标准定义了设备...

    HP笔记本关机自动重启的解决办法

    3. 在这里找到“内建网络装置开机功能(Internal Network Adaper Boot)”并将其设置为“停用(Disable)”。 4. 按下`F10`保存设置并重新启动笔记本,之后插着网线也能正常关机。 **方法二:网卡属性设置** 1. 打开...

    富蒂斯USB2.0免驱百兆网卡驱动

    富蒂斯USB2.0免驱百兆网卡驱动 USB 2.0 100Mbps Ethernet Network Adapter USB 2.0 免驱百兆网卡 SR9900 纯净安装包,原盘拷贝。

    Dell PERC H730P 、H730 、H330 SAS RAID卡 Win2008 R2/Win 2012/Win2012R2 驱动

    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]UVM RAL Adapter

    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 ...

    ipcamadapter_x64 ip camera adapter 64 bit

    IP camera adapter 64位版本 一个虚拟摄像头驱动软件 可以把视频流虚拟成模拟摄像头。在NI机器视觉识别开发时,手机上安装smart webcam或其他,可以把手机用作摄像头用,官网有时在国内无法登陆,特意去国外一趟下载...

Global site tag (gtag.js) - Google Analytics