zoukankan      html  css  js  c++  java
  • Java设计模式菜鸟系列(十三)建模和实现状态模式

    转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39829859


    状态模式(State):同意对象在内部状态改变时改变它的行为,对象看起来好像改动了它的类。状态模式说白了就是一个对象有不同的状态。不同的状态相应不同的行为。它事实上是对switch case这种语句的拓展

    一、uml建模:



    二、代码实现

    /**
     * 演示样例:状态模式-- 一个对像有不同的状 态,不同的状态相应不同的行为
     * 
     * 以下四则运算为例
     */
    
    interface State {
    	public double operate(double num1, double num2);
    }
    
    /**
     * 加法
     */
    class AddOperator implements State {
    
    	@Override
    	public double operate(double num1, double num2) {
    		return num1 + num2;
    	}
    }
    
    /**
     * 减法
     */
    class SubOperator implements State {
    
    	@Override
    	public double operate(double num1, double num2) {
    		return num1 - num2;
    	}
    }
    
    /**
     * 学生
     */
    class Student {
    	private State state;
    
    	public Student(State state) {
    		this.state = state;
    	}
    
    	/**
    	 * 设置状态
    	 */
    	public void setState(State state) {
    		this.state = state;
    	}
    
    	public double operate(double num1, double num2) {
    		return state.operate(num1, num2);
    	}
    
    }
    
    /**
     * client測试类
     * 
     * @author Leo
     */
    public class Test {
    	public static void main(String[] args) {
    		Student s1 = new Student(new AddOperator());
    		System.out.println(s1.operate(12, 23));
    		/**
    		 * 改变状态,即改变了行为 --> 加法运算变成了减法运算
    		 */
    		s1.setState(new SubOperator());
    		System.out.println(s1.operate(12, 23));
    	}
    }

    三、总结

    封装基类状态的行为,并将行为托付到当前状态。



    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    WebFlux系列(二) Server-Sent Events
    WebFlux系列(一)HelloWorld
    Reactor系列(十九)StepVerifier测试
    C++中vector和set使用sort方法排序
    获取线程ID
    C标准中一些预定义的宏__DATE__ __FILE__ __LINE__ __TIME__ __func__
    opencv测试代码
    nohub相关
    tensorflow相关练习
    摄像机相关
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4824296.html
Copyright © 2011-2022 走看看