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

举报
小鲍侃java 发表于 2021/09/09 23:43:12 2021/09/09
【摘要】 策略模式和状态模式的类图相同,目的都是为了解耦,但是还有很多的区别 策略模式 public classs 我{ //打扮 void dressUp(); //娱乐 void entertainment(Grade grade){ grade.entertainment(); } //买车...

策略模式和状态模式的类图相同,目的都是为了解耦,但是还有很多的区别

策略模式


  
  1. public classs 我{
  2. //打扮
  3. void dressUp();
  4. //娱乐
  5. void entertainment(Grade grade){
  6. grade.entertainment();
  7. }
  8. //买车
  9. void buyCar();
  10. }

策略接口


  
  1. public interface Grade(
  2. public void hasMoney();
  3. )

策略实现


  
  1. public class has10 implements Grade{
  2. public void entertainment(){
  3. system.out.print("10块钱保健啥,洗个澡吧")
  4. }
  5. }

  
  1. public class has100 implements Grade{
  2. public void entertainment(){
  3. system.out.print("100块,按个脚吧")
  4. }
  5. }

  
  1. public class has1000 implements Grade{
  2. public void entertainment(){
  3. system.out.print("1000块,那就来个大保健吧")
  4. }
  5. }

调用


  
  1. public class Client {
  2. public static void main(String[] args) {
  3. me = new 我();
  4. me.entertainment(new has10());
  5. me.entertainment(new has100());
  6. }

可以看到只有针对娱乐有不同方法,而其他的项目没有影响,此为策略模式

状态模式

我类的修改


  
  1. public classs 我{
  2. private Grade grade;
  3. public void setGrade(Grade grade) {
  4. this.grade= grade;
  5. }
  6. //打扮
  7. void dressUp(
  8. grade.dressUp();
  9. );
  10. //娱乐
  11. void entertainment(Healthcare healthcare){
  12. grade.dressUp();
  13. }
  14. //买车
  15. void buyCar(
  16. grade.buyCar();
  17. );
  18. }

调用


  
  1. public static void main(String[] args) {
  2. me = new 我();
  3. me.setGrade(new has10());
  4. me.entertainment();
  5. me.dressUp();
  6. me.setGrade(new has100());
  7. me.entertainment();
  8. }

可以看到每一次的变化,我的整个档次都变了,无论是娱乐还是穿衣服,所以此为状态模式

文章来源: baocl.blog.csdn.net,作者:小黄鸡1992,版权归原作者所有,如需转载,请联系作者。

原文链接:baocl.blog.csdn.net/article/details/102581277

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。