【发布时间】:2014-04-23 14:59:16
【问题描述】:
我正面临一个与课程设计相关的基本问题,我确信这很常见,但我没有令人信服的答案。所以这是我的问题。先放代码sn-p
public interface Value {
void setValue(Object value);
Object getValue();
}
public interface SimpleValue extends Value {
void validate();
}
public interface CompoundValue extends Value{
void setValueAt(int position, Value value);
Value getValueAt(int position);
void addValue(Value value);
List<Value> getValues();
}
public class IntValue implements SimpleValue {
@Override
public void setValue(Object value) {
// TODO Auto-generated method stub
}
@Override
public Object getValue() {
// TODO Auto-generated method stub
return null;
}
@Override
public void validate() {
// TODO Auto-generated method stub
}
}
public class ComplexValue implements CompoundValue {
private List<Value> values;
@Override
public void setValue(Object value) {
//Not useful
}
@Override
public Object getValue() {
//not useful
return null;
}
@Override
public void setValueAt(int position, Value value) {
values.set(position, value);
}
@Override
public Value getValueAt(int position) {
return values.get(position);
}
@Override
public List<Value> getValues() {
return values;
}
@Override
public void addValue(Value value) {
values.add(value);
}
}
public class Main {
public static void main(String[] args) {
Value simpleValue = new IntValue();
Value simpleValue2 = new IntValue();
ComplexValue complexValue = new ComplexValue();
Value simpleValue3 = new IntValue();
complexValue.addValue(simpleValue3);
ComplexValue complexValue2 = new ComplexValue();
complexValue2.addValue(simpleValue);
complexValue2.addValue(simpleValue2);
complexValue2.addValue(complexValue);
Value value = complexValue2.getValueAt(2);
if (value instanceof ComplexValue) {
ComplexValue compValue = (ComplexValue) value;
Value finalValue = complexValue.getValueAt(0);
}
}
}
如您所见,我有一个接口“Value”,它有两种变体,一种包含实际值,如“IntValue”,另一种可以包含多个值。这些值可以是 simpleValue 或 CompoundValue 对象
我的问题是处理一个 ComplexValue 对象,我总是必须检查它的实际类并相应地进行类型转换以获得它们的功能,从设计的角度来看,这看起来不是一个体面的 API 设计。
如果有人能指导我针对此问题提供合适的设计指南或任何要在此处使用的设计模式,我将不胜感激。
谢谢。
【问题讨论】:
-
如果我告诉您 SimpleValue 是大小为 1 的 ComplexValue 对您有帮助吗?
标签: java design-patterns