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; } }
狀態類: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 } }
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 } }
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模式。
當然, 你說我不同的策略使用不同的方法,哭的策略使用哭的方法,高興的策略用高興的方法,也能說得過去;所以在這點上不要咬文嚼字。理解它是什么意思就夠了;
