一、适用场景:对象的行为由其当前所属的状态决定的场景。比如微信支付,用户的取消支付这个行为,具体要做什么是由当前的支付状态决定的,当前的支付状态不同,取消支付这个行为会走不同的逻辑。
二、示例
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条)