看到这个问题我也迷糊了
去网上查了资料 有个例子写的比较好
卖发动机
行为1:查询发动机的马力,发动机将返回一个表示马力的整数。
public abstract Motor{
abstract public int getHorsepower();
}
软件完成后 现在发现有一种发动机是电池驱动的 销售部门的人希望知道发动机的充电时间
行为2:查询电驱动发动机的充电时间,发动机将返回一个表示充电时间的整数。
public abstract BatteryPoweredMotor extends Motor{
abstract public int getTimeToRecharge();
}
软件修改完成之后 又新进了一种光驱动发电机 需要一定光能才能运转 客户又要这个需要多少光能的参数
行为3:查询光驱动发动机能够正常运转所需要的最小流明数,发动机返回一个整数。
public abstract SolarPoweredMotor extends Motor{
abstract public int getLumensToOperate();
}
上面的两种发动机偶尔需要检查一下发动机是光驱动还是电驱动,使用instanceof实现
if ( instanceof SolarPoweredMotor){...}
if ( instanceof BatteryPoweredMotor){...}
现在又多了一种发动机 光电双重驱动发动机
为了增加光电驱动发动机,要定义一个新的SolarBatteryPowered抽象类。如果让SolarBatteryPowered从Motor抽象类派生,SolarBatteryPowered将不支持针对光驱动发动机和电驱动发动机的instanceof操作。也就是说,如果查询一个光电驱动的发动机是光驱动的,还是电驱动的,得到的答案是:都不是。
如果用接口来建立行为模型,就可以避免隐含地规定实现模式。例如,前面的几个行为改用接口定义如下。
行为1:
代码
public interface Motor(){
public int getHorsepower();
}
行为2:
代码
public interface BatteryPoweredMotor extends Motor(){
public int getTimeToRecharge();
}
行为3:
代码
public interface SolarPoweredMotor extends Motor{
abstract public int getLumensToOperate();
}
现在光电驱动的发动机可以描述为:
代码
public DualPoweredMotor implements SolarPoweredMotor, BatteryPoweredMotor{}
我写的笼统了一些 也只是一个例子 原文在下面这个链接上 有空看一下吧
http://hibernater.iteye.com/blog/779495
|