gpt4 book ai didi

javascript - 是否有一种设计模式的功能类似于观察者与装饰者的混合?

转载 作者:行者123 更新时间:2023-11-29 10:49:40 26 4
gpt4 key购买 nike

我注意到,在不久前使用 XNA/C#(游戏引擎)之类的东西时,您只需将组件添加到一个对象,就可以为它提供额外的功能。例如:

Class Spaceship 具有组件、CollidableGravityControls 等等...

通常这些组件实现 IUpdatable/IDrawable 接口(interface)或 DrawableGameComponent 或其他东西:https://gamedev.stackexchange.com/questions/20918/what-happens-when-i-implement-iupdateable-or-idrawable-in-xna

当需要更新/绘制或其他一些“事件”时,所有组件都会被调用,这些组件上有这些事件,这让我想到了观察者模式。然而,这些函数看起来像是在“装饰”主类。

这是已知模式吗?这叫什么?这是一个超越游戏开发的好模式吗?我标记 JavaScript 的原因是因为我正在考虑在 JS 中做这样的事情,我想知道是否有人看到有人做过类似的事情。

它可能看起来像这样:

function Watcher() {
this.components = [];
this.update() = function() {
for (component in this.components) {
if (typeof component.update === "function") {
component.update();
}
}
};
}

function Component() {
this.update = function() {
};
}

function Wiggle(obj) {
_.extend(this, Component.prototype);
this.obj = obj;
this.wiggled = false;
this.update = function() {
if (this.wiggled) {
this.obj.x -= 1;
} else {
this.obj.x += 1;
}
wiggled = !wiggled;
};
}

function Car() {
this.x = 0;
_.extend(this, Watcher.prototype);
this.components.push(new Wiggle(this));
}

然后可能会触发事件,所有汽车组件都会更新。

最佳答案

我认为你的意思是 mixins (Javascript) 或 Traits (PHP)

Mixins 基本上只是 _.extend'ing(或 $.extend'ing)你当前的对象与另一个对象(已经有一些属性/函数)。您可以在 http://www.joezimjs.com/javascript/javascript-mixins-functional-inheritance/ 阅读更多相关信息

PHP (5.4) 的 Traits 更强大一些,您可以做很多非常酷的事情。这是来自 stackoverflow 的一个很好的例子:Traits in PHP – any real world examples/best practices?

关于javascript - 是否有一种设计模式的功能类似于观察者与装饰者的混合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12924648/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com