如何暂时从/向对象借用/添加功能?任何设计模式?

时间:2013-08-22 23:58:40

标签: javascript oop design-patterns object

我有一个列表对象 - 节点列表。我想为用户提供“就地排序/订购”。用户可以将任何项目放在列表中的任何位置。是否存在一种设计模式,我将整个行为保持为一个包(作为对象或其他),并且在需要排序模式时可以暂时借用它?

我在Javascript中这样做。

我想到了装饰器,但我需要更改原始对象的属性。感觉不是正确的做法。 Decorator假设在不修改原始对象的情况下添加功能。

新细节:

我对我要做的事情有一个更好的比喻。让我们想想一个游戏角色。角色一直活到游戏中。角色可以担任某些角色。角色可以改变角色的属性,这是永久性的。角色可以一次或多次承担一个或多个角色。我如何构建程序中的“角色”和“角色”。

如果Role就像是角色的装饰者,那么修改角色的私人属性是不错的做法?还有别的吗?

1 个答案:

答案 0 :(得分:0)

作为一般方法,您可以使用链接列表。对于每个节点,您希望保留其后的节点。您还希望保留第一个节点的引用。

  • 当用户将节点A移动到第一个节点和最后一个节点之间的某个位置时,找到节点A(节点B)下面的节点,然后将节点B设置为节点A的下一个节点。

  • 如果用户将节点移动到列表末尾,请将下一个节点设置为null

  • 如果用户将节点移动到列表的开头,请更新第一个节点参考。

最后,当用户保存更改时,使用第一个节点的递归函数创建项目的有序列表。

请注意,您实际上并不需要更改原始对象。您的Node对象应该看起来很简单:

function Node(item, nextNode) {
    this.item = item;
    this.nextNode = nextNode;
}

Node.prototype.getItem = function () {
    return this.item;
};

Node.prototype.getNextNode = function () {
    return this.nextNode;
};

Node.prototype.setNextNode = function (node) {
    this.nextNode = node;
}

item属性可以保存原始对象。