请教command模式问题

nickowen 2011-08-01 03:35:26
实在没看出command和Prototype模式的本质区别在哪?

都是接受主调方,来确定具体的执行类.

请解!!!
...全文
134 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
healer_kx 2011-08-01
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 nickowen 的回复:]

恩.谢谢了.
如果按我那种做法,做出来虽然和COMMAND的标准模式不一样.
其实也就是那种思想了. COMMAND在思想上估计已经包括了那种组合的实现.
[/Quote]

呵呵,不一定要按照书上那种标准的来,那就学死了。谁说咏春不能踢高腿了?
nickowen 2011-08-01
  • 打赏
  • 举报
回复
恩.谢谢了.
如果按我那种做法,做出来虽然和COMMAND的标准模式不一样.
其实也就是那种思想了. COMMAND在思想上估计已经包括了那种组合的实现.
healer_kx 2011-08-01
  • 打赏
  • 举报
回复
你用Factory+Protortype创造出来的对象是什么类型的?为什么你不把这个类型命名为 XXXXCommand呢?
healer_kx 2011-08-01
  • 打赏
  • 举报
回复
在代码复杂量差不多的情况下.只要达到效果,什么模式都一样
以上只是个人的想法.


------------------------------------------------------------
你这种想法写出来的代码,你以为你是原型+工厂,
其实你就是写出来Command,我前面说了,Command对象可以是。。【见13楼】

你只是看到了形式。

nickowen 2011-08-01
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 healer_kx 的回复:]
引用 15 楼 nickowen 的回复:

引用 13 楼 healer_kx 的回复:
Command模式关心的问题是如何去耦合。

而不在于Command对象是如何被创建的,它可以被Factory创建,你可以用Builder模式创建,可以用原型模式创建,你也可以直接new出来。


Prototype关注的是什么?对象怎么被创造出来,还很优雅,有些代码不需要再敲一遍。

……
[/Quote]

用设计模式.主要是就代码的健壮性,维护性.扩展性.
而低耦合,高内聚基本是个标准.

在代码复杂量差不多的情况下.只要达到效果,什么模式都一样
以上只是个人的想法.

Command模式应该有他独特的好处把?毕竟存在及合理啊.

能否指点下Redo Undo在这个模式下的应用?

healer_kx 2011-08-01
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 nickowen 的回复:]

引用 13 楼 healer_kx 的回复:
Command模式关心的问题是如何去耦合。

而不在于Command对象是如何被创建的,它可以被Factory创建,你可以用Builder模式创建,可以用原型模式创建,你也可以直接new出来。


Prototype关注的是什么?对象怎么被创造出来,还很优雅,有些代码不需要再敲一遍。


在去耦合方面,如果用Prototype+一个……
[/Quote]

Prototype+一个工厂 或许有 去耦合的 功效,但是它不是为了去耦合的。
就像 拜阿司匹林泡腾片,他是治疗发烧的,但是感冒一并也好了,但是你只是感冒,不发烧,就不能吃这种药。
这种逻辑你肯定明白吧?
nickowen 2011-08-01
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 healer_kx 的回复:]
Command模式关心的问题是如何去耦合。

而不在于Command对象是如何被创建的,它可以被Factory创建,你可以用Builder模式创建,可以用原型模式创建,你也可以直接new出来。


Prototype关注的是什么?对象怎么被创造出来,还很优雅,有些代码不需要再敲一遍。
[/Quote]

在去耦合方面,如果用Prototype+一个工厂和Command难道很大?
对外部调用者来说都不需要修改.而在内部也是相对独立的.

还有其他什么方面吗?
healer_kx 2011-08-01
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 nickowen 的回复:]

引用 7 楼 zhao4zhong1 的回复:
Command可以UnDo



zhao4zhong1大哥.
撤消在这体现在哪?没看出来
[/Quote]
你先别想Redo Undo了。
healer_kx 2011-08-01
  • 打赏
  • 举报
回复
Command模式关心的问题是如何去耦合。

而不在于Command对象是如何被创建的,它可以被Factory创建,你可以用Builder模式创建,可以用原型模式创建,你也可以直接new出来。


Prototype关注的是什么?对象怎么被创造出来,还很优雅,有些代码不需要再敲一遍。
nickowen 2011-08-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zhao4zhong1 的回复:]
Command可以UnDo
[/Quote]


zhao4zhong1大哥.
撤消在这体现在哪?没看出来
healer_kx 2011-08-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zhao4zhong1 的回复:]

Command可以UnDo
[/Quote]

你这个纯粹是汇编学多了。。。 。。。

Command初衷就是 弱化耦合
这个模式的更高级的应用,是用于实现 Redo/Undo。也要扩展Command模式。
nickowen 2011-08-01
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 babilife 的回复:]
Command* pCommand = new ConcreateComand(pReceiver);//一个是复制他人

如果是Prototype
Command* pCommand = new ConcreateComand(*this);//一个是复制自己
[/Quote]

这个我清楚,其实在Command模式里,ConcreateComand只是做了个桥接的作用.
能否指点下优势?
nickowen 2011-08-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 healer_kx 的回复:]
你这种想法就是看到了形式,没看到初衷啊。
[/Quote]

恩,可能是自己理解不够,问题这样做,我没看到他的好处.

感觉Prototype+一个工厂,完全可以达到command目的,感觉不出command的优势
至善者善之敌 2011-08-01
  • 打赏
  • 举报
回复
Command* pCommand = new ConcreateComand(pReceiver);//一个是复制他人

如果是Prototype
Command* pCommand = new ConcreateComand(*this);//一个是复制自己
赵4老师 2011-08-01
  • 打赏
  • 举报
回复
Command可以UnDo
healer_kx 2011-08-01
  • 打赏
  • 举报
回复
你不觉得23种设计模式都是一回事吗?

基本不都是new Type() 嘛?
healer_kx 2011-08-01
  • 打赏
  • 举报
回复
你这种想法就是看到了形式,没看到初衷啊。
nickowen 2011-08-01
  • 打赏
  • 举报
回复
都是接受主调方,来确定具体的执行类.

Prototype主调方是根据要执行哪个子类来创建调用对象.
如:
Class Base;
Class A:Base;
Class B:Base;

调用方式
main()
{
//
Base *ptr = new A;
ptr->doAction();

}

而Command也差不对,只是把对象传了进去再调用.本质上看不出什么区别
如:
class Command
{
public:
virtual ~Command(){}

virtual void Execute() = 0;
};

class ConcreateComand: public Command
{
virtual void Execute()
{
if (NULL != m_pReceiver)
{
m_pReceiver->Action();
}
}
};
省...

调用方式
int main(){
Receiver* pReceiver = new Receiver();
Command* pCommand = new ConcreateComand(pReceiver);
Invoker* pInvoker = new Invoker(pCommand);
pInvoker->Invoke();

delete pInvoker;
return 0;
}
至善者善之敌 2011-08-01
  • 打赏
  • 举报
回复
Command模式:像是个中间件,为了降低耦合度,Command是将对行为进行封装的典型模式
Prototype模式:是自身复制自己创建新类

如上所述两个没啥联系
healer_kx 2011-08-01
  • 打赏
  • 举报
回复
参考:
http://terrylee.cnblogs.com/archive/2006/01/16/317896.html
加载更多回复(1)

64,652

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧