Java 什么面向对象的GUI设计能够正确地结合命令和观察者模式?
是否有一个面向对象的GUI设计,它是命令和观察者模式的合理组合 我的Java GUI尝试将命令和观察者模式结合起来,如下所示:Java 什么面向对象的GUI设计能够正确地结合命令和观察者模式?,java,design-patterns,command-pattern,observer-pattern,Java,Design Patterns,Command Pattern,Observer Pattern,是否有一个面向对象的GUI设计,它是命令和观察者模式的合理组合 我的Java GUI尝试将命令和观察者模式结合起来,如下所示: 客户端是命令接收器的观察者(例如,输入GUI屏幕或对话框) 调用程序是客户端的一个实例变量 客户端的update()方法接收命令接收器的输入,并使用适当的命令更新调用程序 让我对这个实现感到不舒服的是update()方法包含大量的条件if语句 e、 g 使用命令模式有效地处理GUI事件的正确方法目前还没有找到。观察者模式对它有用吗?嗯,UI的总体设计解决方案是MVC
- 客户端是命令接收器的观察者(例如,输入GUI屏幕或对话框)
- 调用程序是客户端的一个实例变量
- 客户端的update()方法接收命令接收器的输入,并使用适当的命令更新调用程序
使用命令模式有效地处理GUI事件的正确方法目前还没有找到。观察者模式对它有用吗?嗯,UI的总体设计解决方案是MVC,或者它的一些变体(实际上,人们通常不使用显式控制器,而是使用基本上与控制器耦合的模型和视图)。除非您想建立一个撤销框架,否则命令在那里不是必不可少的
在任何情况下,如果您使用Java,您很可能会被一个UI库(如Swing或SWT)所困扰,而这个库将对您的设计产生很大影响。我最终无法得到您想要的。模式必须解决问题,而不是为了使用而使用。那么你要解决的问题是什么?@Andrey:我要解决的问题是建立一个高效的面向对象GUI设计,它可以扩展到我计划的多个应用程序。我为你的困惑道歉。如果问题是主观的或冒犯性的,请随时指定删除。谢谢!我以前用过MVC。既然你推荐了,我就再公平地考虑一下。命令模式看起来非常适合我的应用程序,因为有了undo和宏,但我想现在用Observer模式高效地实现它已经超出了我的能力。
public class Client implements Observer {
InputScreen inputScreen;
Invoker director;
InputScreenCommand inputScreenCommand;
public Client {
inputScreen = new InputScreen();
inputScreen.registerObserver(this);
inputScreenCommand = new InputScreenCommand(inputScreen)
director.setCommand(inputScreenCommand);
director.invoke();
}
public void update(String command) {
if (command.equals("Input Screen 2")) {
inputScreen.removeObserver(this);
// generate new receiver/subject
inputScreen2.registerObserver(this);
// generate new Command
director.setCommand(inputScreen2Command);
director.invoke();
}
// and so on through all the permutations of input from receivers
}
}