首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在创建GUI系统时,有没有一种不使用观察者模式的方法?

在创建GUI系统时,有没有一种不使用观察者模式的方法?
EN

Software Engineering用户
提问于 2014-03-28 12:56:54
回答 2查看 953关注 0票数 2

在Java中,Swing库实现了观察者/订阅者-Publisher设计模式,以设计程序对GUI上事件的响应方式(单击按钮等)。

程序员将ActionListener对象(观察者)注册到GUI元素(subject/ when /publisher),当GUI元素的状态发生变化时,这些对象会得到通知,并相应地做一些事情。这似乎是设计GUI系统的一种合理方法,我想不出任何其他框架能够做到这一点的方法。

在GUI中还有其他设计事件响应系统的方法吗?是否有任何带有GUI事件响应系统的命令式语言框架或库不是这样设计的?最常见的C#图形用户界面库中的事件响应系统是否使用观察者或其他工具实现事件响应问题?Python的库呢,等等。

EN

回答 2

Software Engineering用户

发布于 2014-03-28 13:18:15

这是函数式反应规划。这样做的目的是把时变的实体变成一流的对象。假设我们正在处理一个鼠标光标,我们想要在光标右边画一个10像素的图标。假设有一种类型的TimeVarying<T>表示一个值,该值随时间而变化。TimeVarying总是神奇地包含该数量的当前值。因此,与其注册回调并执行一系列命令式操作来获取当前鼠标位置并更新图标的位置,不如想象鼠标位置是一个TimeVarying<Point>。然后,我们可以写一些类似..。

代码语言:javascript
复制
iconX = mousePosition.x + 10;

iconX变量也是一个时变的量。每当mousePosition发生变化,iconX就会发生变化,就像电子表格中的单元格一样。当然,需要有一些东西来保持所有这些价值观的更新,并以一种安全有效的方式传播这些变化。

有关更多细节,请参见论文反对观察者模式

我知道函数式反应性编程框架是存在的,但我不知道是否有任何成熟的Java框架。

票数 2
EN

Software Engineering用户

发布于 2014-03-28 13:14:37

Swing还允许您继承面板并覆盖核心容器类中的Process*Event方法,您需要首先启用事件。

不过,如果您要创建一个新的复杂小部件,这才是个好主意。

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/234048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档