狀態(tài)模式可以應(yīng)用于多種場(chǎng)景,下面是一些示例及其代碼實(shí)現(xiàn):
1. 交通信號(hào)燈
交通信號(hào)燈(紅燈、綠燈、黃燈)根據(jù)當(dāng)前狀態(tài)切換到下一個(gè)狀態(tài)。
// 狀態(tài)接口
interface TrafficLightState {
void change(TrafficLight trafficLight);
}
// 具體狀態(tài):紅燈
class RedLight implements TrafficLightState {
public void change(TrafficLight trafficLight) {
System.out.println("紅燈 - 請(qǐng)等待");
trafficLight.setState(new GreenLight());
}
}
// 具體狀態(tài):綠燈
class GreenLight implements TrafficLightState {
public void change(TrafficLight trafficLight) {
System.out.println("綠燈 - 請(qǐng)通過(guò)");
trafficLight.setState(new YellowLight());
}
}
// 具體狀態(tài):黃燈
class YellowLight implements TrafficLightState {
public void change(TrafficLight trafficLight) {
System.out.println("黃燈 - 請(qǐng)小心");
trafficLight.setState(new RedLight());
}
}
// 上下文
class TrafficLight {
private TrafficLightState state;
public TrafficLight(TrafficLightState state) {
this.state = state;
}
public void setState(TrafficLightState state) {
this.state = state;
}
public void change() {
state.change(this);
}
}
// 客戶端代碼
public class TrafficLightDemo {
public static void main(String[] args) {
TrafficLight light = new TrafficLight(new RedLight());
light.change(); // 輸出: 綠燈 - 請(qǐng)通過(guò)
light.change(); // 輸出: 黃燈 - 請(qǐng)小心
light.change(); // 輸出: 紅燈 - 請(qǐng)等待
}
}
2. 游戲角色等級(jí)系統(tǒng)
游戲中的角色根據(jù)經(jīng)驗(yàn)值提升等級(jí),不同等級(jí)有不同的行為。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-855946.html
// 狀態(tài)接口
interface LevelState {
void play();
void doubleExperience();
}
// 具體狀態(tài):新手
class NoviceLevel implements LevelState {
public void play() {
System.out.println("新手玩家 - 正常經(jīng)驗(yàn)獲取");
}
public void doubleExperience() {
System.out.println("新手玩家 - 無(wú)法雙倍經(jīng)驗(yàn)");
}
}
// 具體狀態(tài):高手
class MasterLevel implements LevelState {
public void play() {
System.out.println("高手玩家 - 高速經(jīng)驗(yàn)獲取");
}
public void doubleExperience() {
System.out.println("高手玩家 - 雙倍經(jīng)驗(yàn)獲取");
}
}
// 上下文
class Player {
private LevelState levelState;
public Player(LevelState levelState) {
this.levelState = levelState;
}
public void upgradeLevel(LevelState levelState) {
this.levelState = levelState;
}
public void play() {
levelState.play();
}
public void doubleExperience() {
levelState.doubleExperience();
}
}
// 客戶端代碼
public class GameDemo {
public static void main(String[] args) {
Player player = new Player(new NoviceLevel());
player.play(); // 輸出: 新手玩家 - 正常經(jīng)驗(yàn)獲取
player.doubleExperience(); // 輸出: 新手玩家 - 無(wú)法雙倍經(jīng)驗(yàn)
// 玩家升級(jí)
player.upgradeLevel(new MasterLevel());
player.play(); // 輸出: 高手玩家 - 高速經(jīng)驗(yàn)獲取
player.doubleExperience(); // 輸出: 高手玩家 - 雙倍經(jīng)驗(yàn)獲取
}
}
這兩個(gè)示例展示了狀態(tài)模式在不同場(chǎng)景下的應(yīng)用。在第一個(gè)示例中,交通信號(hào)燈根據(jù)當(dāng)前狀態(tài)變化到下一個(gè)狀態(tài);在第二個(gè)示例中,游戲角色根據(jù)等級(jí)狀態(tài)擁有不同的行為。狀態(tài)模式使得狀態(tài)的變化更加靈活和可管理,同時(shí)也使得代碼更加清晰和易于維護(hù)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-855946.html
到了這里,關(guān)于設(shè)計(jì)模式:狀態(tài)模式示例的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!