C
chinaplate
Unregistered / Unconfirmed
GUEST, unregistred user!
在刘艺的<设计模式>,命令模式一章中(P308),提到
命令对象的能力可大可小,在设计时有不同的选择。
A:一个极端是,它仅提供一个请求者和接受者之间的耦合,委托接收者执行请求者的命令;
B:另一个极端是,它自己实现所有功能,根本无须额外的接收者对象。
我可不可以这样理解?
在情况A时,命令对象TCommand功能弱化了,只是将请求者TInvoker的命令请求简单的交给了接收者TReceiver处理.
在情况B时,命令对象,准确的说是具体命令对象TConcreteCommand独立完成了该命令的所有操作,不需要有接收者参与。
我对命令模式的疑惑是,接收者TReceiver的命名和位置
我觉的TReceiver是TConcreteCommand完成特定功能时所需要的参与对象,它是TConcreteCommand的内部实现,按理它应该
封装在TConcreteCommand对象里面,外界(包括Client)不关心它,也不需要知道它的存在与实现形式。
我这么理解对吗?那么TReceiver就不应该作为独立的类成为命令模式的参与者。
从命名上讲,“接收者”的含义是什么呢?它在“接收”什么呢?
比如,在书的命令模式的带undo/redo的文本编辑器范例(P318)中,
具体命令对象TFontFormat是通过TFontDialog来产生新的TFont实例,我完全也可以不用TFontDialog,自己写一个类似的功能
来产生一个TFont实例。也就是说TReceiver类只是实现的细节而已.
命令对象的能力可大可小,在设计时有不同的选择。
A:一个极端是,它仅提供一个请求者和接受者之间的耦合,委托接收者执行请求者的命令;
B:另一个极端是,它自己实现所有功能,根本无须额外的接收者对象。
我可不可以这样理解?
在情况A时,命令对象TCommand功能弱化了,只是将请求者TInvoker的命令请求简单的交给了接收者TReceiver处理.
在情况B时,命令对象,准确的说是具体命令对象TConcreteCommand独立完成了该命令的所有操作,不需要有接收者参与。
我对命令模式的疑惑是,接收者TReceiver的命名和位置
我觉的TReceiver是TConcreteCommand完成特定功能时所需要的参与对象,它是TConcreteCommand的内部实现,按理它应该
封装在TConcreteCommand对象里面,外界(包括Client)不关心它,也不需要知道它的存在与实现形式。
我这么理解对吗?那么TReceiver就不应该作为独立的类成为命令模式的参与者。
从命名上讲,“接收者”的含义是什么呢?它在“接收”什么呢?
比如,在书的命令模式的带undo/redo的文本编辑器范例(P318)中,
具体命令对象TFontFormat是通过TFontDialog来产生新的TFont实例,我完全也可以不用TFontDialog,自己写一个类似的功能
来产生一个TFont实例。也就是说TReceiver类只是实现的细节而已.