This article describes the document editing mode switching function implemented by Java based on state mode. Share it for your reference, as follows:
A pattern definition
State Mode: When an object's inner state changes, it allows changing its behavior, and the object looks like it has changed its class.
Examples of the second mode
1 Pattern Analysis
We use the case of document editing mode to switch to illustrate this mode.
2 Static mode static class diagram
3 Code Examples
3.1 Create a state interface-IState
package com.demo.state;import com.demo.context.Context;/** * * State interface* * @author * */public interface IState { /** * State transition* * @param context * @param mode */ public void convertState(Context context, int mode); /** * Save method* * @param context */ public void save(Context context); /** * Modify method* * @param context */ public void modify(Context context); /** * New method* * @param context */ public void add(Context context); /** * View method* * @param context */ public void view(Context context);}3.2 Create a context-context
package com.demo.context;import com.demo.state.IState;/** * Context environment* * @author * */public class Context { // Preview mode public static final int PREVIEW_MODE = 0; // Edit mode public static final int EDIT_MODE = 1; // Current state private IState state; // Change state public 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 Edit Status 1 EditState
package com.demo.state;import com.demo.context.Context;/** * Edit mode state* * @author * */public class EditState implements IState { /** * State transition*/ public void convertState(Context context, int mode) { if (mode == Context.PREVIEW_MODE) { context.changeState(new PreviewState()); } } /** * New in edit mode*/ public void add(Context context) { System.out.println("Edit mode [add]..."); } /** * Edit mode modification*/ public void modify(Context context) { System.out.println("Edit mode [modify]..."); } /** * Edit mode saving*/ public void save(Context context) { System.out.println("Edit mode [saving]..."); } /** * Edit mode view*/ public void view(Context context) { System.out.println("Edit mode [view]..."); }}3.4 PreviewState
package com.demo.state;import com.demo.context.Context;/** * Preview mode status* * @author * */public class PreviewState implements IState { /** * State transition*/ public void convertState(Context context, int mode) { if (mode == Context.EDIT_MODE) { context.changeState(new EditState()); } } /** * New in preview mode*/ public void add(Context context) { System.out.println("Preview mode does not support the [new] function!"); } /** * Preview mode modification*/ public void modify(Context context) { System.out.println("Preview mode does not support the [modify] function!"); } /** * Preview mode saving*/ public void save(Context context) { System.out.println("Preview mode does not support the [saving] function!"); } /** * Preview mode view*/ public void view(Context context) { System.out.println("Preview mode [view]..."); }}3.5 Client Testing Client
package com.demo;import java.util.Random;import com.demo.context.Context;import com.demo.state.EditState;/** * Client application* * @author * */public class Client { /** * @param args */ public static void main(String[] args) { Context context = new Context(); 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 ? "Preview Mode" : (r == 1 ? "Edit Mode" : ""))); context.doWork(r); } }}4 Running results
Current Mode: Edit Mode
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Editing mode [New]...
Edit mode [Save]...
Editing mode [Modify]...
Edit mode [View]...
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Current Mode: Edit Mode
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Editing mode [New]...
Edit mode [Save]...
Editing mode [Modify]...
Edit mode [View]...
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Current Mode: Preview Mode
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Preview mode does not support the [New] function!
The preview mode does not support the [Save] function!
The preview mode does not support the [Modify] function!
Preview mode [View]...
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Current Mode: Preview Mode
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Preview mode does not support the [New] function!
The preview mode does not support the [Save] function!
The preview mode does not support the [Modify] function!
Preview mode [View]...
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Current Mode: Edit Mode
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Editing mode [New]...
Edit mode [Save]...
Editing mode [Modify]...
Edit mode [View]...
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Three principles of design of this pattern
1 "Open-Close" principle
2 Single responsibility principle
Four usage occasions
1 The behavior of an object is taken from its state, and it must change its behavior according to its state at the moment of operation.
2 An operation contains a huge multi-branch structure, and these branches are determined by the state of the object.
Five-state mode static class diagram
For more Java-related content, readers who are interested in this site can view the topics: "Introduction and Advanced Tutorial on Java Object-Oriented Programming", "Tutorial on Java Data Structure and Algorithm", "Summary of Java Operation DOM Node Skills", "Summary of Java File and Directory Operation Skills" and "Summary of Java Cache Operation Skills"
I hope this article will be helpful to everyone's Java programming.