
一、适用场景:对象的行为由其当前所属的状态决定的场景。比如微信支付,用户的取消支付这个行为,具体要做什么是由当前的支付状态决定的,当前的支付状态不同,取消支付这个行为会走不同的逻辑。
二、示例
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();
}
}
程序执行结果:
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)