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模式。
当然, 你说我不同的策略使用不同的方法,哭的策略使用哭的方法,高兴的策略用高兴的方法,也能说得过去;所以在这点上不要咬文嚼字。理解它是什么意思就够了;
 
 
posted on 2018-06-05 00:33  有点懒惰的大青年  阅读(1316)  评论(0编辑  收藏  举报