22狀態模式State

1、什麼是狀態模式設計模式

  State模式也叫狀態模式,是行爲設計模式的 一種。State模式容許經過改變對象的內部狀態 而改變對象的行爲,這個對象表現得就好像修改 了它的類同樣。測試

 

2、狀態模式的應用場景this

  狀態模式主要解決的是當控制一個對象狀態轉 換的條件表達式過於複雜時的狀況。把狀態的判 斷邏輯轉譯到表現不一樣狀態的一系列類當中,可 以把複雜的判斷邏輯簡化。spa

 

3、狀態模式的結構設計

 

4、狀態模式的角色和職責code

  Context:用戶對象 擁有一個State類型的成員,以標識對象的當前 狀態;對象

  State:接口或基類 封裝與Context的特定狀態相關的行爲;blog

  ConcreteState:接口實現類或子類 實現了一個與Context某個狀態相關的行爲。接口

 

 1 public class Person {
 2     private int hour;
 3 
 4     public int getHour() {
 5         return hour;
 6     }
 7 
 8     public void setHour(int hour) {
 9         this.hour = hour;
10     }
11     
12     public void doSomething(){
13         if(hour == 7) {
14             System.out.println("吃早餐");
15         } else if(hour == 12) {
16             System.out.println("吃中飯");
17         } else if(hour == 18) {
18             System.out.println("吃晚飯");
19         } else {
20             System.out.println(hour + "未定義");
21         }
22     }
23 }

 

 1 public class MainClass {
 2     public static void main(String[] args) {
 3         Person person = new Person();
 4         
 5         person.setHour(7);
 6         person.doSomething();
 7         
 8         person.setHour(12);
 9         person.doSomething();
10         
11         person.setHour(18);
12         person.doSomething();
13         
14         person.setHour(8);
15         person.doSomething();
16     }
17 }

 

=================================================================get

使用狀態模式

 1 public class Person {
 2     private int hour;
 3     private State state;
 4 
 5     public int getHour() {
 6         return hour;
 7     }
 8 
 9     public void setHour(int hour) {
10         this.hour = hour;
11     }
12     
13     public void doSomething(){
14         if(hour == 7) {
15             state = new MState();
16             state.doSomething();
17         } else if(hour == 12) {
18             state = new LState();
19             state.doSomething();
20         } else if(hour == 18) {
21             state = new SState();
22             state.doSomething();
23         } else {
24             state = new NoState();
25             state.doSomething();
26         }
27     }
28 }

狀態  抽象

1 public abstract class State {
2     public abstract void  doSomething();
3 }

吃早餐

1 public class MState extends State {
2 
3     public void doSomething() {
4         System.out.println("吃早餐");
5     }
6 }

吃中午餐

1 public class LState extends State{
2 
3     public void doSomething() {
4         System.out.println("吃中飯");
5     }
6 }

吃晚飯

1 public class SState extends State {
2 
3     public void doSomething() {
4         System.out.println("吃晚飯");
5     }
6 }

未定義

1 public class NoState extends State {
2 
3     public void doSomething() {
4         System.out.println("未定義");
5     }
6 }

測試

 1 public class MainClass {
 2     public static void main(String[] args) {
 3         Person person = new Person();
 4         
 5         person.setHour(7);
 6         person.doSomething();
 7         
 8         person.setHour(12);
 9         person.doSomething();
10         
11         person.setHour(18);
12         person.doSomething();
13         
14         person.setHour(8);
15         person.doSomething();
16     }
17 }
相關文章
相關標籤/搜索