这不是特定于任何语言,但我正在使用JavaScript,所以我将使用javascript。
我有一个“班级”SimpleObject
和另一个班级CompoundObject
。它们具有类似的功能和几乎相似的接口。以下面的示例(已删除简化和不相关的内容):
SimpleObject:
这只是一个基类,并且在子类上重写init
以提供其他功能
function SimpleObject(data){
this.data = data;
this.init();
}
SimpleObject.prototype = {
init: function(){
// Irrelevant data processing code here
},
getData: function(){
return this.data;
}
}
CompoundObject:
CompoundObject
由不同类型的SimpleObject
组成。简单对象相互交互,复合对象在内部处理。
function CompoundObject(simpleObjectsArray, data){
this.simpleObjectsArray = simpleObjectsArray;
this.init(data);
}
CompoundObject.prototype = {
init: function(data){
// Irrelevant data processing code here
},
getData: function(){
var array = [], i;
for(i = 0; i < this.simpleObjectsArray.length; i++){
array[array.length] = {
simpleObjectType: // some value here,
data: this.simpleObjectsArray[i].getData();
};
}
return this.data;
}
}
正如您所看到的,它们具有相似的结构,并且getData
具有类似的返回类型,唯一的区别是SimpleObject
仅返回数据,而CompoundObject
返回数据+每个内部SimpleObject
的其他一些属性。
现在,getData
的值将用于许多其他类,主要是UI。由于它们相似,因此它们的UI(或更确切地说,视觉效果)非常相似。问题是它们足够类似于使用相同的视觉效果,但足够不同以保证不同的类来处理它们。我想设计它们,以便它们可以使用相同的UI类,但保持解耦。
请原谅我,如果问题可能有点令人困惑,因为我自己也很困惑。