【发布时间】:2018-04-29 14:01:47
【问题描述】:
我正在构建一个需要使用多种类型的类似传感器的应用。由于传感器也可能有不同的行为或行为组合,我决定使用decorator pattern。
简而言之,我的层次结构如下所示:
所以任何具体的ISensorDecorator 类都可以装饰(包装)任何具体的IMeasureSensor 类,但是由于具体的ISensorDecorator 也是具体的IMeasureSensor,它们可以相互包装。比如
IMeasureSensor sensor = new FilteredSensorDecorator(
new CalibratedSensorDecorator(
new AccelerometerSensor()
)
);
是声明经过过滤和校准的加速度计传感器的有效语句。
现在假设我在CalibratedSensorDecorator 中有一个名为setCalibration() 的方法。显然我不能打电话
sensor.setCalibration();
因为IMeasureSensor 没有setCalibration() 方法。并尝试使用
((CalibratedSensorDecorator)sensor).setCalibration()
也不行,因为sensor 是FilteredSensorDecorator。
在这种特殊情况下,我如何才能访问CalibratedSensorDecorator,更一般地说,如何访问任何装饰器“链”中的任何特定装饰器?我不想将它们存储为单独的变量,我想动态地进行。
【问题讨论】:
标签: java android design-patterns reflection decorator