天天看點

設計模式:狀态

本文将介紹狀态設計模式 。 它是行為設計模式之一 。 您無需了解許多理論即可了解模式的主要概念。 該文章将分為幾個部分,在其中我将提供有關需要應用該模式的情況,它所具有的利弊以及用法示例的資訊。

設計模式:狀态

有時,當對象的内部狀态更改時,您需要更改其行為。 State設計模式允許執行此操作。 您可以通過建立代表不同狀态和功能的單獨類來獲得此功能。 當然,這些類必須從一個抽象類繼承或實作一個接口。

當我們需要在運作時通過輸入某些State基類的不同子類來更改對象的狀态時,可以使用State設計模式。 這種情況同時是有利和不利的,因為我們有明确的,獨立的州類别,并具有一定的邏輯,而另一方面,類别的數量卻在增加。

讓我們考慮這個例子。 每年有四個季節:冬季,Spring,夏季和秋季。每個季節都有其自己的順序,例如,Spring在冬季之後,夏季在Spring之後等等。

季節的基本狀态界面:

public interface Season {
	public void theSeason(SeasonContext context);
}
           
設計模式:狀态

實作Season接口的狀态類:

public class Winter implements Season {

	@Override
	public void theSeason(SeasonContext context) {
		System.out.println("Winter is now.");
		context.setSeason(new Spring());
	}

}
           

Spring班:

public class Spring implements Season {

	@Override
	public void theSeason(SeasonContext context) {
		System.out.println("Spring is now");
		context.setSeason(new Summer());
	}

}
           

我将省略夏季和秋季的課程,因為它們與以前的課程相同。

SeasonContext類:

public class SeasonContext {
	private Season season;

	public SeasonContext() {
		this.season = new Winter();
	}

	public void setSeason(Season season) {
		this.season = season;
	}

	public void whatTheSaeson() {
		season.theSeason(this);
	}
}
           

所有這些内容都顯示了狀态模式的體系結構:基本狀态接口,實作狀态接口和狀态上下文的類。 現在讓我們看看它是如何工作的:

...
	public static void main(String[] args) {
		SeasonContext sc = new SeasonContext();
		sc.whatTheSaeson();
		sc.whatTheSaeson();
		sc.whatTheSaeson();
		sc.whatTheSaeson();
	}
...
           

結果将是:

Winter is now.
Spting is now
Summer is now.
Autumn is now.
           
參考:

設計模式:在Fruzenshtein的注釋部落格中,來自我們JCG合作夥伴 Alexey Zvolinskiy的陳述 。

翻譯自: https://www.javacodegeeks.com/2013/07/design-patterns-state.html