适配器设计模式---对象适配
2013-12-27 12:49
239 查看
package cn.icer.simulation.ObjectAdapter; /** * 火箭 * @author icer * @date 2013-12-27 * */ public abstract class SkyRocket { private double burnTime; private double mass; private double thrust; public SkyRocket(double mass, double thrust, double burnTime) { this.mass = mass; this.thrust = thrust; this.burnTime = burnTime; } public abstract double getMass(); public abstract double getThrust(); public abstract void setSimTime(double time); }
package cn.icer.simulation.ObjectAdapter; /** * 火箭 * @author icer * @date 2013-12-27 * */ public class PhysicalRocket { private double burnArea; //燃烧面积 private double burnRate; //燃烧率 private double initFuelMass; //燃料 private double totalMass; //燃料总量 private double totalBurnTime; //总燃烧时间 //重力加速度 private static double SPECIFIC_IMPULSE = 620; // Newtons/Kg //燃料密度 private static double FUEL_DENSITY = 1800; // Kg / M**3 public PhysicalRocket(double burnArea, double burnRate, double fuelMass, double totalMass) { this.burnArea = burnArea; this.burnRate = burnRate; this.initFuelMass = fuelMass; this.totalMass = totalMass; double initialFuelVolume = fuelMass / FUEL_DENSITY; this.totalBurnTime = initialFuelVolume / (burnArea * burnRate); } /** * * @return 燃烧时间 */ public double getBurnTime() { return totalBurnTime; } /** * * @param time 燃烧时间 * @return 现在剩余的燃料 */ public double getMass(double time) { if ( time > totalBurnTime) return totalMass - initFuelMass; double burntFuelVolume = burnArea * burnRate * time; return totalMass - burntFuelVolume * FUEL_DENSITY; } /** * * @param time 燃烧时间 * @return 点火以来产生的总推力 */ public double getThrust(double time) { if (time > totalBurnTime) return 0; return FUEL_DENSITY * SPECIFIC_IMPULSE * burnArea * burnRate; } }
package cn.icer.simulation.ObjectAdapter; /** * 火箭 * @author icer * @date 2013-12-27 * */ public class IcerRocket extends SkyRocket { private double time; private PhysicalRocket rocket; public IcerRocket(PhysicalRocket rocket) { super(rocket.getMass(0), rocket.getThrust(0), rocket.getBurnTime()); this.rocket = rocket; } @Override public double getMass() { return rocket.getMass(time); } @Override public double getThrust() { return rocket.getThrust(time); } @Override public void setSimTime(double time) { this.time = time; } }
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 设计模式之创建型模式
- 介绍php设计模式中的工厂模式
- 面向对象设计模式的核心法则
- 常见的PHP五种设计模式小结
- 小议javascript 设计模式 推荐
- javascript 设计模式之单体模式 面向对象学习基础
- 最常用的12种设计模式小结
- php设计模式 Command(命令模式)
- php设计模式介绍之值对象模式第1/5页
- 设计模式之构建(Builder)模式 建造房子实例分析
- Javascript 设计模式(二) 闭包
- javascript学习笔记(九) js对象 设计模式
- ASP.NET的适配器设计模式(Adapter)应用详解
- PHP设计模式之调解者模式的深入解析
- js如何实现设计模式中的模板方法
- 设计模式中的备忘录模式解析及相关C++实例应用
- 代理角色java设计模式之静态代理详细介绍