zoukankan      html  css  js  c++  java
  • java设计模式-State模式

    1.背景:                    

    MM的状态是非常不固定的,说不定刚才还非常高兴,没准一会就生气了。就跟六月的天似的,说变就变。
    封装一下MM的状态:smile,cry,say;MM的状态决定了这些方法该怎么执行.
     
    2.代码:                    
    Boy.java:
    package com.cy.dp.state;
    
    public class Boy {
        private String name;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
        
    }
    View Code

    状态类:State.java(抽象类,具体实现交给子类)

    //状态类
    public abstract class State {
        public abstract void smile();
        public abstract void cry();
        public abstract void say();
    }

    HappyState.java (高兴状态)

    package com.cy.dp.state;
    
    public class HappyState extends State {
    
        @Override
        public void smile() {
            // happy smile
            
        }
    
        @Override
        public void cry() {
            // happy cry
            
        }
    
        @Override
        public void say() {
            // happy say
            
        }
    
    }
    View Code

    UnHappyState.java (不高兴状态)

    package com.cy.dp.state;
    
    public class UnHappyState extends State {
    
        @Override
        public void smile() {
            // unhappy smile
            
        }
    
        @Override
        public void cry() {
            // unhappy cry
            
        }
    
        @Override
        public void say() {
            // unhappy say
            
        }
    
    }
    View Code

    MM.java:

    package com.cy.dp.state;
    
    public class MM {
        private String name;
        private State state = new HappyState();
        
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
        
        public void smile(){
            state.smile();
        }
        public void cry(){
            state.cry();
        }
        public void say(){
            state.cry();
        }
        
    }

    3.小结:              

    state用的也并不多;简单用一句话解释,就是:一个类的动作是根据这个类的内部状态的不同,而有不同的动作。
     
    疑问:
    1.这跟策略模式有什么区别啊?不同的策略我就怎么执行呗。
    2.这不就是一个简单的多态的应用吗?
     
    答:
    没错,设计模式很多时候区分这个还是那个,往往是在语义上的区分而不是语法上的区分,比如说这里咱们说清楚了这就是不同的状态下我们执行不同的方法,那就是State模式。
    当然, 你说我不同的策略使用不同的方法,哭的策略使用哭的方法,高兴的策略用高兴的方法,也能说得过去;所以在这点上不要咬文嚼字。理解它是什么意思就够了;
     
     
  • 相关阅读:
    对其他组的评论与意见
    第一阶段结果展示
    团队第一阶段冲刺绩效评估
    团队冲刺第八天站立会议
    团队检查博客
    团队冲刺地七天站立会议
    团队冲刺第六天站立会议
    团队冲刺第五天战略站立会议
    团队冲刺第四天战略会议站立
    No2_2.接口继承多态_Java学习笔记_继承
  • 原文地址:https://www.cnblogs.com/tenWood/p/9136746.html
Copyright © 2011-2022 走看看