A——>B【A调用B】 将B抽象为对象
Command模式【应用范围较小】
动机
意图
结构
代码
Version01
class Document
{
public void ShowText()
{
//....
}
}
class Graphics
{
public void ShowGraphics()
{
//....
}
}
//应用程序主干/高层抽象
public class Application
{
public void Show()
{
Document doc = new Document();
doc.ShowText();//直接依赖具体行为实现
Graphics gra = new Graphics();
gra.ShowGraphics();//直接依赖具体行为实现
}
}
改进Version2
//已经存在的类,实现细节,底层实现
class Document
{
public void ShowText()
{
//....
}
}
//实现Command的设计模式——抽象体
interface Command
{
void Show();
void Undo();
void Redo();
}
//具体化命令对象——从抽象意义来讲,DocumentCommand表示一个行为
class DocumentCommand : Command
{
private Document doc;
public DocumentCommand(Document doc)
{
this.doc = doc;
}
public void Show()
{
doc.ShowText();
}
public void Undo()
{
}
public void Redo()
{
}
}
//应用程序主干/高层抽象 依赖抽象Command
class Application1
{
Stack<Commanded> stack;
public void Show()
{
foreach (Commanded c in stack)
{
c.Execute();
}
}
public void Undo()
{
if (canUndo)
{
Commanded commanded = stack.Pop();
commanded.Undo();
undoList.Add(commanded);
}
}
public void Redo()
{
if (canRedo)
{
Commanded commanded = undoList.Pop();
commanded.Redo();
}
}
}
要点