この記事では、状態モードに基づいてJavaによって実装されたドキュメント編集モードスイッチング機能について説明します。次のように、参照のために共有してください。
パターン定義
状態モード:オブジェクトの内部状態が変化すると、動作を変更し、オブジェクトがクラスが変更されたように見えます。
2番目のモードの例
1パターン分析
ドキュメント編集モードのケースを使用して、このモードを説明するために切り替えます。
2静的モード静的クラス図
3つのコードの例
3.1状態インターフェイス装置を作成します
パッケージcom.demo.state; Import com.demo.demo.context.context;/** * * state interface * * @author * */public interface istate {/** * state transition * * @param context * @param mode */public void convertState(Context Context、int Mode); / ** *メソッドの保存 * * @paramコンテキスト */ public void save(コンテキストコンテキスト); / ** *メソッドの変更 * * @paramコンテキスト */ public void modify(context context); / ** *新しい方法 * * @param Context */ public void add(コンテキストコンテキスト); / ** * Method * * @param Context */ public void View(コンテキストコンテキスト);}3.2コンテキストコンテキストを作成します
パッケージcom.demo.context;インポートcom.demo.state.istate;/** *コンテキスト環境 * * @author * */public classコンテキスト{// previewモードpublic static final int preview_mode = 0; //編集モードpublic static final int edit_mode = 1; //現在の状態の民間積状態。 //状態公共void changestate(istate state){this.state = state; } / ** * run * @param mode * / public void dowork(int mode){system.out.println( "----------------------------------------------); this.state.convertState(this、mode); this.state.add(this); this.state.save(this); this.state.modify(this); this.state.view(this); System.out.println("--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------3.3ステータス1 EditStateの編集
パッケージcom.demo.state; Import com.demo.demo.context.context;/***編集モード状態** @author***/public class editstate ISTate {/***状態遷移*/public void convertState(コンテキストコンテキスト、intモード){if(mode == context.context.context.conttunt_mode) }} / ***編集モードでnew* / public void add(context context){system.out.println( "edit mode [add] ..."); } / ***モード変更を編集* / public void modify(context context){system.out.println( "edit mode [modify] ..."); } / ***編集モードの保存* / public void save(context context){system.out.println( "edit mode [saving] ..."); } / ***編集モードビュー* / public void View(Context Context){System.out.println( "edit Mode [View] ..."); }}3.4 PreviewState
パッケージcom.demo.state; import com.demo.demo.context.context;/***プレビューモードステータス** @author***/public class previewstate istate {/***状態遷移*/public void converttate(context context、int mode){if(mode == context.edit_mode){context.changeState(); }} / ***新規プレビューモード* / public void add(context context){system.out.println( "プレビューモードは[new] function!"); } / ***プレビューモードの変更* / public void Modify(Context Context){System.out.println( "プレビューモードは[変更]関数をサポートしません!"); } / ***プレビューモードの保存* / public void save(context context){system.out.println( "プレビューモードは[保存]関数をサポートしません!"); } / ***プレビューモードビュー* / public voidビュー(コンテキストコンテキスト){system.out.println( "preview mode [View] ..."); }}3.5クライアントテストクライアント
パッケージcom.demo; import java.util.random; import com.demo.context.context; import com.demo.state.editstate;/** *クライアントアプリケーション * * @author * */public class {/** * * @param args */public static biod main [] {contration = compution = new contrations(]; Context.Changestate(new EditState()); RANDOM RANDOM = new Random(); for(int i = 0; i <5; i ++){int r = random.nextint(2); System.out.println( "Current Mode:" +(r == 0? "プレビューモード":(r == 1? "編集モード": ""))); context.dowork(r); }}}4ランニング結果
現在のモード:編集モード
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -
編集モード[新] ...
編集モード[保存] ...
編集モード[変更] ...
編集モード[表示] ...
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -
現在のモード:編集モード
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -
編集モード[新] ...
編集モード[保存] ...
編集モード[変更] ...
編集モード[表示] ...
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -
現在のモード:プレビューモード
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -
プレビューモードは[新しい]関数をサポートしません!
プレビューモードは[保存]機能をサポートしません!
プレビューモードは、[修正]機能をサポートしません!
プレビューモード[表示] ...
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -
現在のモード:プレビューモード
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -
プレビューモードは[新しい]関数をサポートしません!
プレビューモードは[保存]機能をサポートしません!
プレビューモードは、[修正]機能をサポートしません!
プレビューモード[表示] ...
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -
現在のモード:編集モード
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -
編集モード[新] ...
編集モード[保存] ...
編集モード[変更] ...
編集モード[表示] ...
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -
このパターンのデザインの3つの原則
1「オープンクローズ」原則
2単一責任の原則
4つの使用機会
1オブジェクトの動作はその状態から取得され、操作の瞬間にその状態に応じてその動作を変更する必要があります。
2操作には巨大なマルチブランチ構造が含まれており、これらの分岐はオブジェクトの状態によって決定されます。
5状態モード静的クラス図
Java関連のコンテンツを増やすために、このサイトに興味のある読者は、「Javaオブジェクト指向プログラミングに関する紹介と高度なチュートリアル」、「Javaデータ構造とアルゴリズムに関するチュートリアル」、Java Operation domノードスキルの要約」、「Javaファイルの概要、およびJava操作スキルの概要」の概要を見ることができます。
この記事がみんなのJavaプログラミングに役立つことを願っています。