Java23デザインパターン-17。動作モードの状態モード

Javaの設計原則に加えて、23の設計パターンもあります。

これらのパターンは前任者によって少しずつ蓄積され、改善され、最適化されており、これらのデザインパターンはいくつかの特定の問題を解決することができます。

そして、これらのモードでは、言語の使用が完全に反映されていると言えます。

次に  、今日動作モードでの状態モードを学習し  ます    。

状態モード

まず、状態モードと呼ばれるものを見てみましょう

百科事典から、状態モードでオブジェクトの内部状態を変更してからその動作を変更できるため、オブジェクトがクラスを変更しているように見えることがわかります。これはより抽象的な場合があります。

天気に関しては、晴れ、雨、風などがあります。天気が異なれば、行動も異なります。たとえば、晴れ、スコールシャワーは不可能ですが、雲ひとつないはずです。太陽輝く

状態モードの定義と特性

状態モードの定義:ステートフルオブジェクトの場合、複雑な「判断ロジック」がさまざまな状態オブジェクトに抽出され、内部状態が変化したときに状態オブジェクトの動作を変更できるようになります。

状態モードはオブジェクト動作モードであり、その主な利点は次のとおりです。

1.状態モードは、特定の状態に関連する動作を1つの状態にローカライズし、異なる状態の動作を分離して「単一責任の原則」を満たします。

2.オブジェクト間の相互依存性を減らします。独立したオブジェクトにさまざまな状態を導入すると、状態遷移がより明確になり、オブジェクト間の相互依存性が低下します。

3.プログラムの拡大に貢献します。新しいサブクラスを定義することで、新しい状態と遷移を簡単に追加できます。


状態モードの主な欠点は次のとおりです。

1.状態モードを使用すると、必然的にシステム内のクラスとオブジェクトの数が増加します。

2.状態モードの構造と実装は比較的複雑であり、不適切に使用すると、プログラムの構造とコードに混乱が生じます。

状態パターンの構造と実現

状態パターンは、環境によって変更されたオブジェクトの動作をさまざまな状態オブジェクトにパックします。その目的は、内部状態が変更されたときにオブジェクトの動作を変更させることです。

状態モデルには、次の主な役割が含まれます。

1.環境の役割:コンテキストとも呼ばれ、顧客が関心を持っているインターフェースを定義し、現在の状態を維持し、処理のために状態関連の操作を現在の状態オブジェクトに委任します。

2.抽象状態の役割:環境オブジェクトの特定の状態に対応する動作をカプセル化するためのインターフェースを定義します。

3.特定の状態の役割:抽象的な状態に対応する動作を実現します。

 

これを知った後、上記の例を実装しましょう

最初の一歩:

最初に抽象状態クラスを定義しましょう。このクラスは天気です

定義したら、この天気のメソッドを追加します

2番目のステップ:

次に、具体的な実現抽象状態クラスを定義しましょう

3番目のステップ:

次に、環境の役割が必要です。状態を変更することで、現在の天気を確認できます。

package com.java.state;

public class Context {

	private Weather weather;
	private Integer status;
	
	public Context(Integer status) {
		this.status = status;
		if(this.status == 1) {
			this.weather = new SunnyDay();
		}
		if(this.status == 2) {
			this.weather = new WindDay();
		}
		if(this.status == 3) {
			this.weather = new SnowDay();
		}
	}

	public Weather getWeather() {
		return weather;
	}

	public void setWeather(Weather weather) {
		this.weather = weather;
	}
	
	public Integer getStatus() {
		return status;
	}

	public void setStatus(Integer status) {
		this.status = status;
		if(this.status == 1) {
			this.weather = new SunnyDay();
		}
		if(this.status == 2) {
			this.weather = new WindDay();
		}
		if(this.status == 3) {
			this.weather = new SnowDay();
		}
	}

	public void weather() {
		this.weather.weather();
	}
}

環境をインスタンス化するときに、整数型変数を渡し、この変数にこのクラスのステータスをバインドさせることができます。これにより、ステータスを変更して、変数に従って対応する型を作成し、特定の実装を呼び出すことができます。

テスト:

テストするテストクラスを取得しましょう

見てみましょう

次に、ステータスを変更します

大丈夫じゃない、みんな感じてる

 

OK、それだけです、みんなよく見てください。たくさん練習してください。ご不明な点がございましたら、お問い合わせくださいQQ:2100363119

私の個人的なウェブサイトを訪問するために皆を歓迎します:lemon1234.comメッセージを残してくれてありがとう

おすすめ

転載: blog.csdn.net/weixin_45908370/article/details/109492527