状态模式和策略模式的区别

状态模式与策略模式在行为上存在差异。状态模式中,状态转换由系统自身控制,如请假单的状态变化,调用者无法直接改变;而策略模式中,策略是由调用者指定,系统根据策略执行,类似于电脑根据指令执行任务。小明在不同国家的问候与打招呼行为可体现策略模式的应用,因为这是根据外部环境(国家)变化决定的。
摘要由CSDN通过智能技术生成

区别主要体现在行为上,而不是结构上,所以,看时序图就能很好的看出两者的区别。

状态模式

image

看1.4,状态B是状态A创建的,也就是由系统本身控制的。调用者不能直接指定或改变系统的状态转移

所以,状态是系统自身的固有的,调用者不能控制系统的状态转移。比如,一个请假单有“部长审批”-“经理审批”-“审批通过”-“审批不通过”等状态,请假者没有办法将一个部长都还没审批完的请假单提交给经理,这个状态转换只能系统自己完成。

策略模式

image

看1.5,策略B是调用者指定的,系统自身并不能指定或改变策略。

所以策略是外界给的,策略怎么变,是调用者考虑的事情,系统只是根据所给的策略做事情。这时系统很像是一台电脑,根据指令执行动作,打一鞭子滚一滚。

知识检测

小明中国出发到日本再到美国去旅行,在不同的国家都要做两件事,问候和打招呼,怎么做取决于他在哪个国家。(就是编程时经常碰到的多语言问题了)根据需求,请问该使用哪种模式?开发者写了下面的代码,请问下面的代码是状态模式还是策略模式?

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值