状态模式

举报
小鲍侃java 发表于 2021/09/10 00:38:45 2021/09/10
【摘要】 定义:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类 结构:就是在把所有情况拆分成多个类,在调用时把这些类分别set进去。 场景:在玩lol时 有攻击,行走,技能使用,那么按照状态模式分,就分为正常时三个行为的状态,被控制是这三个行为的状态,被眩晕时这三个行为的状态。 优点:1.减少if else的使用 ...

定义:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类

结构:就是在把所有情况拆分成多个类,在调用时把这些类分别set进去。

场景:在玩lol时 有攻击,行走,技能使用,那么按照状态模式分,就分为正常时三个行为的状态,被控制是这三个行为的状态,被眩晕时这三个行为的状态。

优点:1.减少if else的使用

           2.减少耦合度,是扩展更容易

缺点:使类增多,结构变复杂。

类图:

代码:

Context

 


  
  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(Grade grade){
  12. grade.dressUp();
  13. }
  14. //买车
  15. void buyCar(
  16. grade.buyCar();
  17. );
  18. }

策略接口


  
  1. public interface Grade(
  2. public void dressUp();
  3. public void entertainment();
  4. public void buyCar();
  5. )

策略实现


  
  1. public class has10 implements Grade{
  2. public void dressUp(){
  3. system.out.print("10块钱,来个跨栏背心得了")
  4. }
  5. public void entertainment(){
  6. system.out.print("10块钱保健啥,洗个澡吧")
  7. }
  8. public void buyCar(){
  9. system.out.print("10块钱,坐公交吧")
  10. }
  11. }

  
  1. public class has100 implements Grade{
  2. public void dressUp(){
  3. system.out.print("100块钱,来个山寨耐克")
  4. }
  5. public void entertainment(){
  6. system.out.print("100块钱,按个脚吧")
  7. }
  8. public void buyCar(){
  9. system.out.print("100块钱,打车!")
  10. }
  11. }

  
  1. public class has1000 implements Grade{
  2. public void dressUp(){
  3. system.out.print("1000块钱,来个正品的361度")
  4. }
  5. public void entertainment(){
  6. system.out.print("1000块钱,来个大保健,正经的")
  7. }
  8. public void buyCar(){
  9. system.out.print("1000块钱,租车!")
  10. }
  11. }

调用


  
  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/102570021

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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