gpt4 book ai didi

java - 绘画程序界面的OO设计

转载 作者:行者123 更新时间:2023-12-01 05:55:07 25 4
gpt4 key购买 nike

我正在编写一个绘画程序。我的基本类(class)是:

  class Workspace { Bitmap b; List<Command> undoList; }

class Command { void execute(); }

class ClearScreen extends Command

class BlurEffect extends Command

class View { Bitmap screen; }

class Interface

工作区对象保存表示程序状态的位图。 Command 类表示在工作区上执行命令的命令模式,其中通过重置工作区状态并重播旧命令来进行撤消。界面对象将用户按下的按钮链接到命令, View 将工作区状态渲染到屏幕位图。

我的问题是表示命令。 ClearScreen 命令很简单;它只是告诉工作区用白色填充位图,并且它会立即发生。 BlurEffect命令比较复杂;模糊需要一个参数来确定屏幕模糊程度,执行可能需要一些时间,并且用户通常希望在选择一个模糊参数之前尝试一些模糊参数(即,他们需要在提交之前预览模糊效果)。如何修改上述内容以支持这种预览?

我能想到的最好的办法就是用类似的东西来扩展 Command:

  class BlurCommand extends Command
{
void setBlurAmount(float x) ...

// View can use this to render a preview to the
// screen bitmap, where the workspace bitmap isn't modified in the process
void preview(Workspace w, Bitmap b)

void execute() // apply blur effect to workspace
}

所以想法是,在界面中,单击“模糊”按钮会创建一个新的 BlurCommand 对象,View 中的“渲染屏幕”方法将开始调用“预览”方法来渲染屏幕并“执行”仅当用户想要应用效果时调用。

这是我能做到的最干净的方式吗?我试图坚持模型- View - Controller 设计,并且不希望我的预览行为使事情变得复杂。

最佳答案

是的,或者您可以应用模糊,如果操作被取消则撤消它,或者如果参数更改则撤消并重做它。如果重播整个命令堆栈太耗时,可以在应用模糊之前拍摄快照。

关于java - 绘画程序界面的OO设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3264821/

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