zoukankan      html  css  js  c++  java
  • 设计模式(八)状态模式

    状态模式:允许通过改变对象内部的状态来改变对象的行为,这个对象的改变就像是改变了这个类一样。

    第一步:创建State抽象类 定义一个具体的状态所对应的响应行为的抽象方法。

    public abstract class State {
        public abstract void oper(Operation oper);
    }

    **第二步 **:创建具体的State类 具体的状态类,继承State并实现该状态的行为操作。

    public class CtrlC extends State{
    
        //Ctrl C
        @Override
        public void oper(Operation oper) {
            if("Ctrl+c".equals(oper.getOper())){
                System.out.println("copy operation");
            }else{
                oper.setState(new CtrlV());
                oper.doOper();
            }
        }
    
    }
    public class CtrlV extends State{
    
        //Ctrl V
        @Override
        public void oper(Operation oper) {
            if("Ctrl+v".equals(oper.getOper())){
                System.out.println("paste operation");
            }else{
                oper.setState(new CtrlX());
                oper.doOper();
            }
        }
    
    }  
    public class CtrlX extends State{
    
        //Ctrl X
        @Override
        public void oper(Operation oper) {
            if("Ctrl+x".equals(oper.getOper())){
                System.out.println("cut operation");
            }else{
                System.out.println("error");
            }
        }
    
    }

    第三步:创建Context   Context:含有State的一个引用,并负责调用具体状态类的行为操作。

    public class Operation {
        private String oper;
        private State state;
        
        //init concrete State
        public Operation(){
            state = new CtrlC();
        }
        
        //execute specific operation,then change current State
        public void doOper(){
            state.oper(this);
            state = new CtrlC();
        }
        
        
        
        public State getState() {
            return state;
        }
        public void setState(State state) {
            this.state = state;
        }
        public String getOper() {
            return oper;
        }
        public void setOper(String oper) {
            this.oper = oper;
        }
        
    }

    第四步:测试

    public class MainClass {
        public static void main(String[] args) {
            
            Operation operation = new Operation();
            
            operation.setOper("Ctrl+c");
            operation.doOper();
            
            operation.setOper("Ctrl+v");
            operation.doOper();
            
            operation.setOper("Ctrl+c");
            operation.doOper();
        }
    }
  • 相关阅读:
    SQL Server 锁的 8 种类型
    MYSQL 提取时间中的信息的 4 方法
    MYSQL 时间计算的 3 种函数
    MYSQL 的 6 个返回时间日期函数
    SQL Server 错误18456
    MYSQL <=>运算符
    django比较相等或者不相等的模板语法ifequal / ifnotequal
    django模板语言的注释
    ECharts修改坐标轴,坐标轴字体,坐标轴网格样式以及控制坐标轴是否显示
    http://www.cnblogs.com/linxiyue/p/8244724.html
  • 原文地址:https://www.cnblogs.com/ganchuanpu/p/7647635.html
Copyright © 2011-2022 走看看