状态模式

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

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

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

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

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

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

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

类图:

代码:

Context

 


      public classs 我{
        private Grade grade;
        public void setGrade(Grade grade) {
             this.grade= grade;
          }
        //打扮
        void dressUp(
       grade.dressUp();
       );
        //娱乐
        void entertainment(Grade grade){
            grade.dressUp();
         }
        //买车
        void buyCar(
       grade.buyCar();
       );
      }
  
 

策略接口


      public interface Grade(
            public void dressUp();
            public void entertainment();
            public void buyCar();
      )
  
 

策略实现


      public class has10 implements Grade{
            public void dressUp(){
                system.out.print("10块钱,来个跨栏背心得了")
             }
            public void entertainment(){
                system.out.print("10块钱保健啥,洗个澡吧")
             }
            public void buyCar(){
                system.out.print("10块钱,坐公交吧")
             }
      }
  
 

      public class has100 implements Grade{
           public void dressUp(){
                system.out.print("100块钱,来个山寨耐克")
             }
            public void entertainment(){
                system.out.print("100块钱,按个脚吧")
             }
            public void buyCar(){
                system.out.print("100块钱,打车!")
             }
      }
  
 

      public class has1000 implements Grade{
           public void dressUp(){
                system.out.print("1000块钱,来个正品的361度")
             }
            public void entertainment(){
                system.out.print("1000块钱,来个大保健,正经的")
             }
            public void buyCar(){
                system.out.print("1000块钱,租车!")
             }
      }
  
 

调用


      public static void main(String[] args) {
                我 me = new ();
               me.setGrade(new has10());
               me.entertainment();
               me.dressUp();
               me.setGrade(new has100());
               me.entertainment();
             }
  
 


 

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

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

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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