zoukankan      html  css  js  c++  java
  • Java 实现状态(State)模式

    /**
     * @author stone
     */
    public class WindowState {
    	private String stateValue;
    	
    	public WindowState(String stateValue) {
    		this.stateValue = stateValue;
    	}
    	
    	public String getStateValue() {
    		return stateValue;
    	}
    
    	public void setStateValue(String stateValue) {
    		this.stateValue = stateValue;
    	}
    	
    	public void handle() {
    		/*
    		 * 依据不同状态做不同操作, 再切换状态
    		 */
    		if ("窗体".equals(stateValue)) {
    			switchWindow();
    			this.stateValue = "全屏";
    		} else if ("全屏".equals(stateValue)) {
    			switchFullscreen();
    			this.stateValue = "窗体";
    		}
    	}
    	
    	private void switchWindow() {
    		System.out.println("切换为窗体状态");
    	}
    	
    	private void switchFullscreen() {
    		System.out.println("切换为全屏状态");
    	}
    	
    }

    /**
     * 状态的使用
     * @author stone
     *
     */
    public class WindowContext {
    	private WindowState state;
    	
    	public WindowContext(WindowState state) {
    		this.state  = state;
    	}
    	
    	public WindowState getState() {
    		return state;
    	}
    	
    	public void setState(WindowState state) {
    		this.state = state;
    	}
    	
    	public void switchState() {
    		this.state.handle();
    	}
    }
    

    /*
     * 状态(State)模式 行为型模式
     * 既改变对象的状态,又改变对象的行为
     * 依据状态,改变行为
     */
    public class Test {
    	public static void main(String[] args) {
    		/*
    		 * 本例的 状态值仅仅有两个,由状态类自身控制
    		 * 也能够把状态值的控制,交由client来设置
    		 */
    		WindowContext context = new WindowContext(new WindowState("窗体"));
    		context.switchState();
    		context.switchState();
    		context.switchState();
    		context.switchState();
    
    	}
    }

    打印

    切换为窗体状态
    切换为全屏状态
    切换为窗体状态
    切换为全屏状态




  • 相关阅读:
    第四周总结&实验报告二
    第三周实验总结
    2019秋第二周总结
    2019春期末总结
    C语言第四次实验报告
    第三次设计报告
    2019第二次实验设计报告
    2019第一次实验设计报告
    2019第十二周作业
    第五周课程总结&试验报告(三)
  • 原文地址:https://www.cnblogs.com/yfceshi/p/6973375.html
Copyright © 2011-2022 走看看