Android设计模式之(7)----状态模式

作者: Ch3r1sh | 来源:发表于2017-08-18 15:59 被阅读115次

    状态模式

    所谓状态模式,就是代表一个事物有多个状态。因为状态的变化而导致一系列的变化。

    听起来和策略模式很相似,都是类似if-else,实际上策略模式侧重于算法的区别,而
    状态模式更看重行为的控制。

    应用场景

    • 同一个产品,有多个状态产生多个行为
    • 有明显的状态区别

    优点:代码结构清晰,逻辑流程完善。将状态行为和结果封装在同一个具体实现类中,易维护阅读,若有新增状态,只需要增加具体的状态以及行为状态以及得到结果即可。

    缺点:类的数量增多,开发效率低下

    代码示例

    现在有一个人要进出一道门,而对于这道门来说,可以粗略分为两个状态,两个状态将导致两种结果

    • 状态一:开门状态

      • 行为一:这个人可以出门(进门)
    • 状态二:关门状态

      • 行为二:这个人不可以出门(进门)

    (一)状态接口

    public interface Controller {
        void openDoor();//开门
        void closeDoor();//关门
    }
    

    (二)管理状态的控制器

    public class DoorController implements Controller {
    
        private DoorState doorState;
    
        public DoorState setDoorState(DoorState doorState) {
            this.doorState = doorState;
            return doorState;
        }
    
        @Override
        public void openDoor() {//开门状态
            setDoorState(new OpenDoorState());
        }
    
        @Override
        public void closeDoor() {//关门状态
            setDoorState(new CloseDoorState());
        }
    }
    

    控制器只负责负责开门和关门两个状态的控制。

    开门状态openDoor所产生的具体行为由具体的实现类OpenDoorState表示

    关门状态closeDoor所产生的具体行为由具体的实现类CloseDoorState表示

    (三)具体状态的行为接口

    public interface DoorState {
        void  goInDoor();//进门
        void getOutDoor();//出门
    }
    

    (四)具体行为所产生的结果

    • 开门状态想要进门或者出门的行为结果
    public class OpenDoorState implements DoorState {
        @Override
        public void goInDoor() {
            System.out.print("\n"+"开门状态:可以进门");
        }
    
        @Override
        public void getOutDoor() {
            System.out.print("\n"+"开门状态:可以出门");
        }
    }
    
    • 关门状态想要进门或者出门的行为结果
    public class CloseDoorState implements  DoorState {
        @Override
        public void goInDoor() {
            System.out.print("\n"+"关门状态:不可进门");
    
        }
    
        @Override
        public void getOutDoor() {
            System.out.print("\n"+"关门状态:不可以出门");
    
        }
    }
    
    

    (五)调用方式

    DoorController doorController = new DoorController(new OpenDoorState());
            doorController.openDoor();
            doorController.closeDoor();
    
            DoorController doorController1 = new DoorController(new CloseDoorState());
            doorController1.openDoor();
            doorController1.closeDoor();
    

    显示结果

    开门状态:可以进门
    开门状态:可以出门
    关门状态:不可进门
    关门状态:不可以出门
    
    

    总结

    上述代码,完整展示了当一个事物有状态时,他所处的状态以及具体的行为会产生什么样的结果。

    github代码地址

    相关文章

      网友评论

        本文标题:Android设计模式之(7)----状态模式

        本文链接:https://www.haomeiwen.com/subject/rnyarxtx.html