策略模式与命令模式的区别 是什么?

wanglovec 2008-11-15 11:32:04
有人说 前一个是封装算法 后一个是封装动作

我觉着着不是本质的区别? 大家以为呢?
...全文
960 28 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
jxt123codedown 2011-11-02
  • 打赏
  • 举报
回复
我本来挺清楚的~
sourcceinsigt35 2008-12-03
  • 打赏
  • 举报
回复
mark
filec75 2008-12-03
  • 打赏
  • 举报
回复
mark
lemonrong 2008-12-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zmlovelx 的回复:]
策略模式 把易于变化的行为分别封装起来,让它们之间可以互相替换, 让这些行为的变化独立于拥有这些行为的客户。
GoF《设计模式》中说道:定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换。该模式使得算法可独立于它们的客户变化。

Command命令模式是一种对象行为型模式,它主要解决的问题是:在软件构建过程中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”的问题。
GoF《设计模式》…
[/Quote]
赞!
lq20051610211 2008-12-01
  • 打赏
  • 举报
回复
up~
junstruggle 2008-11-29
  • 打赏
  • 举报
回复
ding
wanglovec 2008-11-29
  • 打赏
  • 举报
回复
给我的感觉是,1:策略模式 不决定何时用哪个策略。而command 模式中的请求者 会决定。
2:可以给command 设置不同的接受者,command 对象 如果只是简单的调用 接受者 则基本上 它就没有存在的必要


可能说的不是很清楚,与大家共讨论
wanglovec 2008-11-29
  • 打赏
  • 举报
回复
其实command模式就是把原来involker需要有一个receiver的引用给去掉了,这样原来的一个对receiver的一个函数调用就变成了一个command对象的执行,中间引入了command对象就把involker和receive分离了,这样任何一端的变化都会影响到另一端,这种思想在dp中很常见.
command对象带来的第二个好处就是将原来的函数变成了一个对象,这样就可以方便的进行管理,支持undo redo 甚至象上文中放入堆栈中让它自动执行.更强的就是加入事务的管理.


策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。"、"策略模式仅仅封装算法,提供新算法插入到已有系统中,以及老算法从系统中"退休"的方便,策略模式并不决定在何时使用何种算法

现在 对command 模式和策略模式有了更清晰的认识,但如果 清晰的说出他们的区别 我还一直 想不出来该怎么表达
qap22 2008-11-29
  • 打赏
  • 举报
回复
mark
wanglovec 2008-11-29
  • 打赏
  • 举报
回复
他们之间还是有很大区别的,特别是 invoke

命令模式 是有一个 “命令” command 这个中间层,由于 请求者 直接调用的是 command 这样就和 实现者分开了
nullah 2008-11-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 Chiyer 的回复:]
策略模式
http://www.jdon.com/designpatterns/designpattern_Strategy.htm

命令模式
http://www.jdon.com/designpatterns/command.htm
[/Quote]
MARK
android2008 2008-11-28
  • 打赏
  • 举报
回复
不懂,帮顶
CodeDreaming 2008-11-28
  • 打赏
  • 举报
回复
大体是的
就呆在云上 2008-11-21
  • 打赏
  • 举报
回复
http://www.cnblogs.com/zhenyulu/articles/87237.html看看这篇文章吧:
特别是回复

各种设计模式之间,有很多相似之处,只是由于侧重的方向不同。 我个人觉得,策略模式和命令模式的其中一个最大区别,是在于:策略模式对付的问题域通常是一个,就是说,多个策略只是处理同一个问题,而命令模式对付的是多个问题域,就是很多不同的命令来做不同的事情。
lemonrong 2008-11-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zmlovelx 的回复:]
策略模式 把易于变化的行为分别封装起来,让它们之间可以互相替换, 让这些行为的变化独立于拥有这些行为的客户。
GoF《设计模式》中说道:定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换。该模式使得算法可独立于它们的客户变化。

Command命令模式是一种对象行为型模式,它主要解决的问题是:在软件构建过程中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”的问题。
GoF《设计模式》…
[/Quote]
说的很清楚
taodm 2008-11-21
  • 打赏
  • 举报
回复
是的,最大的区别就是概念上的区别。
它们是用在不同环境下的。即使它们的代码长得一个样。
在家里你是“子女”,在学校你是“学生”。学生和子女要区别么?
mujiok2003 2008-11-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zmlovelx 的回复:]
策略模式 把易于变化的行为分别封装起来,让它们之间可以互相替换, 让这些行为的变化独立于拥有这些行为的客户。
GoF《设计模式》中说道:定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换。该模式使得算法可独立于它们的客户变化。

Command命令模式是一种对象行为型模式,它主要解决的问题是:在软件构建过程中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”的问题。
GoF《设计模式》…
[/Quote]


说得非常好,策略模式主要目的是可扩展性,命令模式的主要目的是解耦.实际应用中,根据需要使用.
filec75 2008-11-21
  • 打赏
  • 举报
回复
ding
帅得不敢出门 2008-11-15
  • 打赏
  • 举报
回复
策略模式 把易于变化的行为分别封装起来,让它们之间可以互相替换, 让这些行为的变化独立于拥有这些行为的客户。
GoF《设计模式》中说道:定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换。该模式使得算法可独立于它们的客户变化。

Command命令模式是一种对象行为型模式,它主要解决的问题是:在软件构建过程中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”的问题。
GoF《设计模式》中说道:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。



加载更多回复(8)

5,530

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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