我在寫繪畫程序。我的基本類是:面向繪畫程序界面的OO設計
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類表示通過重置工作區狀態和重放舊命令來執行撤消操作的工作區上執行命令的命令模式。接口對象鏈接從用戶到命令的按鈕按下,視圖將工作空間狀態呈現給屏幕位圖。
我的問題是與表示命令。 ClearScreen命令很簡單;它只是告訴工作空間用白色填充位圖,它會立即發生。 BlurEffect命令更復雜;模糊需要一個模糊屏幕的參數,執行可能需要一些時間,用戶通常想在選擇模糊參數之前嘗試一些模糊參數(即在提交之前需要預覽模糊效果的樣子)。我如何修改上述以支持這種預覽?
我能想出的最好的是命令的東西,如延長:
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的位圖來預覽圖像,而不是在Workspace的位圖上預覽結果,這會迫使我從快照中恢復以嘗試其他模糊。 – BobDuck 2010-07-16 13:01:51