状态模式和策略模式的区别(4大区别)

状态模式和策略模式的区别(4大区别)-mikechen

状态模式和策略模式都是行为型模式,但它们之间有一些区别,下面详解状态模式和策略模式的区别@mikechen

状态模式

状态模式是一种行为模式,用于封装同一对象的不同行为,可以是对象在运行时更改其行为的更简洁的方式,而无需求助于条件语句。

比如:可以用用状态模式设计一个多线程的状态转换程序。

多线程存在 5 种状态:分别为新建状态、就绪状态、运行状态、阻塞状态和死亡状态。

如下图所示:

状态模式和策略模式的区别(4大区别)-mikechen

各个状态当遇到相关方法调用,或事件触发时会转换到其他状态转换,这样的场景就可以使用状态模式。

 

策略模式

策略模式也是一种行为型设计模式,它定义了一组算法并封装起来,使它们之间可以相互替换,让算法的变化独立于使用算法的客户。

打个比方说:我们出门的时候会选择不同的出行方式,比如:骑自行车、坐公交、坐火车、坐飞机、坐火箭等等。

这些出行方式,每一种都是一个策略,这就是典型的策略模式。

 

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

1.目的不同

状态模式的主要目的是根据对象的内部状态改变其行为,而策略模式的主要目的是在运行时动态地选择算法。

2.实现方式不同

状态模式通过封装不同的状态类来实现不同的状态,而策略模式通过封装不同的算法类来实现不同的算法。

3.角色不同

状态模式包含状态类、环境类和抽象状态类,环境类包含一个指向抽象状态类的引用,具体状态类实现抽象状态类中的抽象方法。

而策略模式包含策略类、环境类和抽象策略类,环境类包含一个指向抽象策略类的引用,具体策略类实现抽象策略类中的抽象方法。

4使用场景不同

状态模式适用于对象存在多个状态,且状态之间有相互转换的情况,而策略模式适用于需要在运行时根据不同的情况选择不同的算法的情况。

以上就是状态模式和策略模式的区别,更多内容请查看:Java设计模式:23种设计模式(万字图文全面总结)

作者简介

陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

👇阅读更多mikechen架构文章👇

阿里架构 |双11秒杀 |分布式架构 |负载均衡 |单点登录 |微服务 |云原生 |高并发 |架构师

以上

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法