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();
    
    	}
    }

    打印

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




  • 相关阅读:
    什么时候是个头?
    生活就是这样
    差距究竟在哪里?
    认识到三个问题
    研究生三件事
    重写DNN6.2注册、登陆、修改等个人中心
    SQL游标的使用
    SQL UPDATE实现多表更新
    SQL 百万级两表数据间更新和添加
    DNN路径
  • 原文地址:https://www.cnblogs.com/yfceshi/p/6973375.html
Copyright © 2011-2022 走看看