处理非常相似的对象

时间:2017-02-11 01:54:17

标签: javascript design-patterns

这不是特定于任何语言,但我正在使用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类,但保持解耦。

请原谅我,如果问题可能有点令人困惑,因为我自己也很困惑。

0 个答案:

没有答案