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

来源:互联网 发布:知识产权 淘宝 编辑:程序博客网 时间:2024/04/26 10:57

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

类适配器

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

客户端想要的接口:

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);}@Overridepublic double getMass() {return getMass(time);}@Overridepublic double getThrust() {return getThrust(time);}@Overridepublic 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);}@Overridepublic double getMass() {return rocket.getMass(time);}@Overridepublic double getThrust() {return rocket.getThrust(time);}@Overridepublic void setSimTime(double t) {this.time = t;}}


Java的IO流API是最好的适配器实现,适配器模式和装饰模式比较相似。适配器模式侧重于适配新的接口,而装饰模式则侧重于对已有对象的扩展。

0 0