设计模式-状态模式

设计模式-状态模式

状态模式指对象根据自身不同的状态表现出不同的行为

适用于状态转化条件判断复杂的情况,可以将复杂的判断逻辑下沉到一系列状态类中,减少判断分支语句
class diagram
比如我们拿人生了三个阶段举例
先定义一个抽象的状态接口

public interface PersonState {
    void doHomework();
    void work();
    void babysit();
}

给出儿童、成年和老年三个实现

public class ChildState implements PersonState{
    @Override
    public void doHomework() {
        System.out.println("最烦做作业了,但是还是要做...");
    }

    @Override
    public void work() {
        System.out.println("工作是大人的事情,小孩子不需要工作。");
    }

    @Override
    public void babysit() {
        System.out.println("我还是个孩子,怎么看孩子!");
    }
}

public class AdultState implements PersonState{
    @Override
    public void doHomework() {
        System.out.println("成年人写什么作业!");
    }

    @Override
    public void work() {
        System.out.println("每天都在工作。");
    }

    @Override
    public void babysit() {
        System.out.println("一直在工作没时间看孩子!");
    }
}

public class ElderlyState implements PersonState{
    @Override
    public void doHomework() {
        System.out.println("作业是不可能做作业的!");
    }

    @Override
    public void work() {
        System.out.println("好不容易熬到退休工作也是不可能再工作的!");
    }

    @Override
    public void babysit() {
        System.out.println("在家看孩子...");
    }
}

定义Person类,将三种行为委托给状态子类

public class Person {

    public static final PersonState CHILD_STATE = new ChildState();
    public static final PersonState ADULT_STATE = new AdultState();
    public static final PersonState ELDERLY_STATE = new ElderlyState();

    @Setter
    private PersonState state;

    public void doHomework(){
        state.doHomework();
    }
    public void work(){
        state.work();
    }
    public void babysit(){
        state.babysit();
    }
}

调用

public class Demo {
    public static void main(String[] args) {
        Person person = new Person();

        person.setState(Person.CHILD_STATE);
        person.doHomework();
        person.work();
        person.babysit();

        person.setState(Person.ADULT_STATE);
        person.doHomework();
        person.work();
        person.babysit();

        person.setState(Person.ELDERLY_STATE);
        person.doHomework();
        person.work();
        person.babysit();
    }
}

状态模式避免了过多 switch- case 或者 if- else 的使用,更突出了单一职责原则,提高了代码的可维护性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值