• 设计模式学习笔记十七:状态模式


    设计模式学习笔记十七:状态模式

    介绍

    状态(STATE)模式也叫状态对象(Object for states)模式,属于对象行为型模式。允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。
    所谓状态模式,其实就是状态机的实现。

    使用场景

    当业务中有许多的状态,状态有很多的流转,按照最直接的思维模式来实现代码的话,会出现很多的if ... else if ... else...,这种情况下可以使用状态模式重构你的代码。
    另外,非状态机模式的逻辑,如果很多的if...else...逻辑大多数也是结构设计不合理导致的。

    UML结构图:

    State

    代码实现

    1.上下文,即Context

    public class Context {
        State stateA;
        State stateB;
    
        State state;
        public Context() {
            stateA = new ConcreteStateA(this);
            stateB = new ConcreteStateB(this);
            state = stateA;
        }
        public void setState(State state) {
            this.state = state;
        }
        public void handle() {
            state.handle();
        }
    }
    

    2.状态接口,即State

    public interface State {
        public void handle();
    }
    

    3.具体状态逻辑,即ConcreteStateA和ConcreteStateB

    public class ConcreteStateA implements State {
        private Context context;
        public ConcreteStateA(Context context) {
            this.context = context;
        }
        @Override
        public void handle() {
            System.out.println("ConcreteStateA.handle");
            context.setState(context.stateB);
        }
    }
    public class ConcreteStateB implements State{
        private Context context;
        public ConcreteStateB(Context context) {
            this.context = context;
        }
        @Override
        public void handle() {
            System.out.println("ConcreteStateB.handle");
            context.setState(context.stateA);
        }
    }
    
    

    4.测试调用,TestDrive

    public class Run {
        public static void main(String[] args) {
            Context context = new Context();
            context.handle();
            context.handle();
            context.handle();
            context.handle();
        }
    }
    
    
  • 相关阅读:
    FreeCAD二次开发-makeChamfer创建倒角
    FreeCAD二次开发-makeFillet创建倒圆
    FreeCAD二次开发-Gui.Selection.getSelectionEx() 遍历选中的对象
    FreeCAD二次开发-Part.Ellipse创建椭圆
    FreeCAD二次开发-Part.makePolygon创建多边形
    FreeCAD二次开发-face.extrude创建拉伸
    FreeCAD二次开发-Part.Face创建面
    FreeCAD二次开发-Part.Shape合并几何元素,生成拓扑形状
    FreeCAD二次开发-Part.LineSegment创建直线
    FreeCAD二次开发-Part.Arc创建圆弧
  • 原文地址:https://www.cnblogs.com/liushijie/p/4774724.html
Copyright © 2020-2023  润新知