当前位置:  开发笔记 > 编程语言 > 正文

你能让我轻易理解动态,抽象的事件对象吗?

如何解决《你能让我轻易理解动态,抽象的事件对象吗?》经验,为你挑选了1个好方法。

我使用MFC为GUI按钮编写了C++事件驱动的应用程序,我使用像onmousedown这样的HTML事件来触发网页中的一些Javascript.当您使用接口并且事件是硬编码时,事件驱动编程的想法是直观的.

我知道如何在C中使用函数指针,我看到Windows如何使用它们来运行事件循环.我可以编写代码来动态调用不同的函数.

我的问题是,从编译时转移到运行时.我在这里谈论任何语言,但如果您需要一种语言,请选择Javascript或PHP,因为我最近使用它们.我完全没有掌握如何使用自己的事件对象来完成任务.这不是我得到的概念.由于我不使用它们,我不知道它们的实际用途是什么.

例如,我想如果我想制作一个自定义的回合制游戏,那么我可能会使用事件对象来表示一些只需要"发生"的游戏片段能力的效果.

有人能给我一个简单的自定义事件吗?或者有用或实用的情况?它在很大程度上取决于语言和环境以及如何处理事件?一个Javascript答案会很好,但我读了很多语言.

对不起,我只是缺乏这方面的东西,需要一些实用,先进(中级?)的见解.它就像是C中的指针.我"得到"指针以及它们是你的朋友.但有一段时间我没有,而我认识的许多人仍然没有.一旦你得到它就很简单,我就是不会那样获得自定义的动态事件.



1> Christian Nu..:

当我们谈论面向事件的编程时,我们通常会讨论观察者设计模式的一个或多个实现.观察者设计模式的一个目标是实现对象之间的松散耦合.

如果没有一个很好的例子,这可能并不意味着什么,并且肯定有很多好的例子; 我怀疑我的将是他们中最好的,但我会对它进行打击.想象一下两个物体.一个物体想要知道什么时候发生了与另一个物体发生的事情,所以它本身可以做一些事情 - 也许家里的狗,罗孚,当他下班回家时想要在门口迎接爸爸.您可以通过两种方式对该方案进行编程,对吧?

确保爸爸有一个参考罗孚,当他回家时,打电话给罗孚的greetDatAtTheDoor()方法,或者

给Rover一个对爸爸的引用,听爸爸的onArriveHome事件,当它激活时,在内部调用greetDadAtTheDoor().

从表面上看,两者之间似乎没有太大区别,但实际上,爸爸已经将罗孚的一些实施方式烧成了他; 如果罗孚的实施由于某种原因不得不改变,我们必须在两个地方做出改变:一次是在罗孚,一次是在爸爸.也许并不是一件大事,但仍然不理想.

现在想象妈妈也想和爸爸打招呼.那只猫,Bigglesworth先生,他不太喜欢爸爸,想要确保他不在身边,所以他宁愿出门.一个邻居乔想知道爸爸什么时候回家,所以他可以告诉他爸爸欠他的二十块钱.我们如何解释所有这些情景,以及其他不可避免的情况?放置对妈妈的greetHusband()方法的引用,cat的getOutNow()方法,狗的greetDadAtTheDoor()方法和Joe的goGetMyMoney()方法进入爸爸的类定义会让爸爸快速搞砸 - 并且没有充分的理由,因为所有爸爸真的需要做,自己,回家.妈妈,狗,猫和邻居只是希望在发生这种情况时得到通知,

语言以不同的方式处理这些东西的细节,但是当你开始使用谷歌搜索时,模式通常涉及在事件"调度程序"(在这种情况下,爸爸)上有一个数组或类似数组的结构 - 即,其他人都感兴趣的对象),并且"订阅者"(例如,妈妈,猫,流浪者和乔)都通过在调度员上调用公开暴露的方法并将参考传递给他们自己来"注册" - 以某种形式出现在爸爸的"订阅者"数组中的引用.然后,当爸爸回家时,他"派遣"一个活动 - "我回家了!" 事件,比如说 - 这实际上是一个循环遍历每个订阅者的函数,并使用他们自己的一些可公开访问的方法调用它们 - 只有它'

由于我最近几乎编写了ActionScript代码,所以这就是它在我的世界中的样子 - 比如,从我的妈妈班级中声明:

var dad:Dad = new Dad();
dad.addEventListener(DadEvent.ARRIVED_HOME, greetHusbandAtDoor);

private function greetHusbandAtDoor(event:DadEvent):void
{
   // Go greet my husband
}

那么,在爸爸,当我回到家时,我所要做的就是:

dispatchEvent(new DadEvent(DadEvent.ARRIVED_HOME));

...并且因为Flash为我处理事件调度和通知细节(同样,每个人都有所不同,但在内部,Flash遵循我所描述的概念模型),我的爸爸回家了,每个家庭成员都做了它注册了什么自动做.

希望这能解释一下 - 事件思维是什么样的,松散耦合意味着什么,它为什么重要,等等.祝你好运!

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有