设计模式:19-状态模式

设计模式:19-状态模式,第1张

设计模式:19-状态模式

一、适用场景:对象的行为由其当前所属的状态决定的场景。比如微信支付,用户的取消支付这个行为,具体要做什么是由当前的支付状态决定的,当前的支付状态不同,取消支付这个行为会走不同的逻辑。
二、示例
1.定义一个支付状态抽象类:

package cn.edu.tju.app;

public abstract class PaymentState {
    public abstract  void continuePayment();
    public abstract void cancelPayment();
}

其中有两个方法,分别对应继续支付和取消支付。
2.定义3个支付状态的实现类

package cn.edu.tju.app;

public class OngoingPaymentState extends PaymentState {
    @Override
    public void continuePayment() {
        System.out.println("支付正在进行中,请不要重复发起");
    }

    @Override
    public void cancelPayment() {
        System.out.println("即将取消支付");
    }
}

package cn.edu.tju.app;

public class FinishedPaymentState extends PaymentState {
    @Override
    public void continuePayment() {
        System.out.println("您已支付完成,不需要支付");
    }

    @Override
    public void cancelPayment() {
        System.out.println("您已支付完成,无法取消");
    }
}

package cn.edu.tju.app;

public class CancelledPaymentState extends PaymentState {
    @Override
    public void continuePayment() {
        System.out.println("您选择了继续支付");
    }

    @Override
    public void cancelPayment() {
        System.out.println("支付已经取消,无法重复进行 *** 作");
    }
}

这3个类分别代表不同的支付状态,在这3种状态下,继续支付所走的逻辑是不通的,同样地,在这3种状态下,取消支付所走的逻辑也是不同的。
3.定义主类进行测试:

package cn.edu.tju.app;

public class PaymentStateTest {
    public static void main(String[] args) {
        PaymentState paymentState1=new OngoingPaymentState();
        paymentState1.continuePayment();
        PaymentState paymentState2=new FinishedPaymentState();
        paymentState2.continuePayment();
        PaymentState paymentState3=new CancelledPaymentState();
        paymentState3.continuePayment();
    }
}

程序执行结果:

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zaji/5707978.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存