大話設計模式 狀態模式

2021-08-19 20:18:11 字數 2198 閱讀 5911

首先看一段**:

public class work else if(hour <=13)else if(hour <=17)else elseelse

}} }

當有很多條件判斷時,且很多的條件判斷後產生了很多的業務邏輯,雖然**可以正常執行,但是要修改某個邏輯,既整改邏輯流程也許就回發生改變,從而加大了維護時間的成本,並且冗長的業務邏輯**使**不夠精簡,可讀性很差。

所以引入狀態模式,把每個邏輯流程封裝成類,既這個流程的內在改變,從業務**就轉成了修改類。

引入狀態模式後的**:

public abstract class workstate
將主要的業務功能封裝成乙個抽象,每個流程類去實現它就行:

package status;

public class afternoonstate extends workstate else

}}

package status;

public class eveningstate extends workstateelseelse

} }}

package status;

//上午工作 狀態

public class forenoonstate extends workstate else

}}

package status;

public class noonstate extends workstate else }

}

package status;

public class reststate extends workstate

}

package status;

public class sleepingstate extends workstate

}

工作執行方法:

package status;

public class works

private double hour ;

public double gethour()

public void sethour(double hour)

private boolean finish = false;

public boolean tashfinished;

public boolean isfinish()

public void setfinish(boolean finish)

public void setstate(workstate s)

public void writeprogram()

}

works project = new works();

project.sethour(9);

project.writeprogram();

project.sethour(10);

project.writeprogram();

project.sethour(12);

project.writeprogram();

project.sethour(13);

project.writeprogram();

project.sethour(14);

project.writeprogram();

project.sethour(17);

project.writeprogram();

project.tashfinished = false;

project.writeprogram();

project.sethour(19);

project.writeprogram();

project.sethour(22);

project.writeprogram();

上午工作精神百倍 9.0

上午工作精神百倍 10.0

所以在開發中會遇到 當乙個物件的行為取決於它的狀態時,並且它執行時根據它的狀態改變它的行為時,就可以使用狀態模式

大話設計模式 狀態模式

在狀態模式 state pattern 中,類的行為是基於它的狀態改變的。這種型別的設計模式屬於行為型模式。我們建立表示各種狀態的物件和乙個行為隨著狀態物件改變而改變的 context 物件。大話設計模式中程傑老師給出的定義是,狀態模式 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改...

java 狀態模式(大話設計模式)

該模式主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同狀態的一系列類當中,可以把複雜的判斷邏輯簡化。當然,如果這個判斷邏輯很簡單,那就沒必要用 狀態模式 了。互相組合 抽象狀態類 author administrator public abstract ...

《十二》讀《大話設計模式》之狀態模式

對於狀態模式,大話設計模式 是以人從上班到下班到加班的狀態來展開講述的。狀態模式其實就是某乙個物件在某個過程或者時間的乙個狀態記錄,但是這個狀態的順序不能發生變化,在程式設計方面可能要比其他模式稍微複雜點,請待我慢慢將來。本人喜歡用 來形象的講述原理,可能是因為對單純的看些理論的書有些反感或者無趣吧...