• 设计模式(八)状态模式


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

    第一步:创建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();
        }
    }
  • 相关阅读:
    关于oracle的导入数据流程,以及错误解决
    解决 lombok 和 freemarker 下载慢问题 以及安装方法
    解决maven项目没有Maven Dependencies
    将maven仓库改为阿里仓库
    Dos攻击和校网渗透
    KaliLinux切换python版本
    Kali国内更新源
    linux安装jdk(.rpm)
    Centos 关于 mysql 命令
    Linux删除命令
  • 原文地址:https://www.cnblogs.com/ganchuanpu/p/7647635.html
Copyright © 2020-2023  润新知