一,概述
狀態模式:允許物件在內部狀態改變時改變它的行為,物件看起來好像修改了它的類。
狀態模式主要解決的是當控制乙個物件狀態的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同狀態的一系列類中,可以把複雜的判斷邏輯簡化。
意圖:允許乙個物件在其內部狀態改變時改變它的行為
適用場景:
1.乙個物件的行為取決於它的狀態,並且它必須在執行時刻根據狀態改變它的行為。
2.乙個操作中含有龐大的多分支結構,並且這些分支決定於物件的狀態。
二,示例
題目:根據不同時間段,顯示不同時間段的精神狀態
1)面向過程版本
class program
public static void writeprogram()
else if (hour < 13)
else if (hour < 17)
else
else
else}}
}}
2)工作狀態分類版本
缺點:writeprogram 中有太多的判斷,如果更改時間段可能要改好幾個,而且改錯的風險極大
class program
}//工作
public class work
set
}//任務完成
private bool finish = false;
public bool taskfinished
set
}public void writeprogram()
else if (hour < 13)
else if (hour < 17)
else
else
else}}
}}
3)狀態模式
主要解決的問題:當控制乙個物件狀態轉移的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同狀態的一系列類當中。可以把複雜的邏輯簡化。
消除龐大的條件分支語句。
class program
}//抽象狀態
public abstract class state
//上午工作狀態
public class forenoonstate : state
else}}
//中午工作狀態
public class noonstate : state
else}}
//下午工作狀態
public class afternoonstate : state
else}}
//晚間工作狀態
public class eveningstate : state
else
else}}
}//睡眠狀態
public class sleepingstate : state
}//下班休息狀態
public class reststate : state
}//工作
public class work
private double hour;
public double hour
set
}private bool finish = false;
public bool taskfinished
set
}public void setstate(state s)
public void writeprogram()
}
三,狀態模式模板
class program
}class context
public state state
set}
public void request()
}abstract class state
class concretestatea : state
}class concretestateb : state
}
大話設計模式十六 狀態模式(無盡加班何時休)
狀態模式主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同狀態的一系列類當中,可以把複雜的判斷邏輯簡化。state類,抽象狀態類,定義乙個介面以封裝與context的乙個特定狀態相關的行為 public inte ce state concretestat...
加班何時休
2017 12 12 年中五六月份開始,我便著手繼續cad方面的c 開發任務了,加班變多了。前面的文章都說過了。本以為這一階段完成了,能夠好好休整一下,做下調整。沒有想到這三個月還是一如既往,甚至還多。我查了一下釘釘工作記錄,每月加班時長40 h至70 h,我還常忘打卡。根本沒有時間鍛鍊身體。都說身...
設計模式 狀態模式
狀態模式 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。狀態模式主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況,把狀態的判斷邏輯轉移到表示不同狀態的一些列類當中,可以把複雜的判斷邏輯簡化。當乙個物件的行為取決於它的狀態,並且它必須在執行時刻根據狀態改變它的行...