23种设计模式--状态模式---State

参考:https://blog.csdn.net/weixin_48052161/article/details/119696250
生活中的状态模式:
以水为例,水之三态,固、液、气,三种状态表现出不同的特性和行为,它们之间的转换也伴随着热力学的现象。
电梯,有运行状态、开门状态、闭门状态、停止状态等
QQ来说,有几种状态,在线、隐身、忙碌等,每个状态对应不同的操作
java线程分为:新建状态(New),就绪状态(Runnable),运行状态(Running),阻塞状态(Blocked),死亡状态(Dead)

代码演示:
一个漂亮的MM 有开心和悲伤两种状态,且不同转态下,MM说的话,和哭笑的动作,都会根据状态的不同而不同.

if–else if和继承抽象天生适合转态模式,细品!!!

代码1:
if–else:

package com.example.dtest.design23.state;

public class MM {
//    姓名
    String name;

//    转态
    MMState state;

//    内置状态的类别,分为HAPPY,SAD2种
    private enum MMState{HAPPY,SAD}

    public void smile(){

        if(state.equals(MMState.HAPPY)){
            System.out.println("开怀大笑");
        }else if(state.equals(MMState.SAD)){
            System.out.println("无奈苦笑");
        }

    }

    public void cry(){

        if(state.equals(MMState.HAPPY)){
            System.out.println("喜极而泣");
        }else if(state.equals(MMState.SAD)){
            System.out.println("嚎啕大哭");
        }

    }

    public void say(){

        if(state.equals(MMState.HAPPY)){
            System.out.println("开心极了!");
        }else if(state.equals(MMState.SAD)){
            System.out.println("郁闷不说话了!!");
        }

    }

    public void setHappy(){
        this.state = MMState.HAPPY;
    }

    public void setSad(){
        this.state = MMState.SAD;
    }


}

测试:

package com.example.dtest.design23.state;

public class stateTest01 {

    public static void main(String[] args) {

        MM mm = new MM();
//        设置状态为开心
        mm.setHappy();
//        调用方法
        mm.smile();
        mm.cry();
        mm.say();

//        改变状态为Sad
        mm.setSad();
        System.out.println("-----------改变状态为Sad-------------");

//        调用方法
        mm.smile();
        mm.cry();
        mm.say();

    }

}

在这里插入图片描述

代码演示2:抽象继承

人物的行为状态抽象类:MMState

package com.example.dtest.design23.state.state02;

public abstract class MMState {

    abstract void smile();
    abstract void cry();
    abstract void say();

}

行为状态实现类:

package com.example.dtest.design23.state.state02;

public class MMSadState extends MMState{
    @Override
    void smile() {
        System.out.println("无奈苦笑");
    }

    @Override
    void cry() {
        System.out.println("嚎啕大哭");
    }

    @Override
    void say() {
        System.out.println("郁闷不说话!!!");
    }
}
package com.example.dtest.design23.state.state02;

public class MMHappyState extends MMState{
    @Override
    void smile() {
        System.out.println("开怀大笑");
    }

    @Override
    void cry() {
        System.out.println("喜极而泣");
    }

    @Override
    void say() {
        System.out.println("开心极了");
    }
}

人物执行门面类:

package com.example.dtest.design23.state.state02;

public class MM {

//    姓名
    String name;
//    状态 默认为无状态
    MMState state = null;

    public void smile(){
        state.smile();
    }

    public void cry(){
        state.cry();
    }

    public void say(){
        state.say();
    }


}

测试类:

package com.example.dtest.design23.state.state02;

public class StateTest02 {

    public static void main(String[] args) {

        MM mm = new MM();
//        设置状态为开心
        mm.state = new MMHappyState();
        mm.smile();
        mm.cry();
        mm.say();
//        改变状态为Sad
        mm.state = new MMSadState();
        System.out.println("------------改变状态为Sad----------------");

//        调用方法
        mm.smile();
        mm.cry();
        mm.say();

    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值