命令對象模式是我仍然無法真正掌握的,並且我在當前正在處理的代碼中發現了一個實現,所以我研究了它很久,很難看出我是否可以最終得到它真實世界的例子。問題是,我確信這個問題沒有得到很好的實施,而這只是一個剛剛閱讀過它並認爲它在這裏有意義的人的嘗試。命令對象模式wannabe還是真實的東西?
讓我拿出來給你(出於保密原因,將大大簡化,但我會盡我所能展示的主要概念):
public class CommandOne
{
public CommandOne(Manager manager, MyForm form)
{
m_manager = manager;
m_form = form;
}
public void Execute()
{
m_manager.CommandOne(m_form);
}
}
public class CommandTwo
{
public CommandTwo(Manager manager, MyForm form)
{
m_manager = manager;
m_form = form;
}
public void Execute()
{
m_manager.CommandTwo(m_form);
}
}
這令我奇怪的第一件事是這兩個類不是從任何抽象類繼承,也不是實現一個通用接口。
使用這些命令的代碼如下:
public class MyForm : System.Windows.Forms.Form
{
public MyForm(Manager manager)
{
m_manager = manager;
}
private void SomeMethod()
{
....
var cmd = new CommandOne(manager, this);
cmd.Execute();
...
}
private void OtherMethod()
{
....
var cmd = new CommandTwo(manager, this);
cmd.Execute();
...
}
}
所以我看到它的方式,這種形式是絕對連接到所有參與,除了其正在通過它的構造函數注入給它的經理類。所以對於這段代碼,我真的沒有看到創建「命令」類的好處,它基本上只是將調用委託給管理器的方法,因爲表單在需要它們時實例化它們,並在之後調用execute方法。
那麼,有人可以解釋一下,如果有這個實現缺少真正的命令對象模式,儘管它可能過於主觀,那麼在這種情況下實現它會有什麼好處?
謝謝。
使用「Form」的命令是什麼? – SwDevMan81
它被髮送到管理器中的委託方法,該管理器顯示消息框,詢問用戶他是否想保存或不更改其相應的修改表單的屬性。海事組織這是非常糟糕的設計,但我認爲,超出了問題的範圍:) –