package com.bitz.coin.benifit.test; /** * 状态模式的优点:当if判断过多,直接写if判断后期代码不好维护,因此等于把if里面的内容封装到不同的类里面了 * 主程序也就是client看起来比较清洁,因为判断都放到下一层content里面了 * content里面根据不同的判断,调用【new】不同的类【也就是之前if封装的那一块内容】 * 然后将new的不同的类,传递给content,通过content调用成员变量得到状态,这个状态调用他的方法的目的 * 有点像aop,控制反转,将new的权限交给别人 */ public class Client { public static void main(String[] args) { /** * 传统方法:如果if判断情况 * */ int num = 2; if (num == 2) { System.out.println("情况一"); } else if (num > 2) { System.out.println("情况二"); } else if (num < 2) { System.out.println("情况三"); } /** * 优化模式,状态模式 * */ Content content = new Content(num); content.statFunc(); content.state.handle("传参"); } }
============上下文类================
//其实也就是把client内容放在上下文实现
package com.bitz.coin.benifit.test; public class Content { public State state; private Integer num; public Content(int num){ this.num=num; } public void statFunc(){ if (num == 2) { state= new StateA(); } else if (num > 2) { state= new StateB(); } else if (num < 2) { state= new StateC(); } } }
===================接口=========================
package com.bitz.coin.benifit.test; public interface State { /** * 状态对应的处理 */ public void handle(String sampleParameter); }
==============情况A===============
package com.bitz.coin.benifit.test; public class StateA implements State { @Override public void handle(String sampleParameter) { System.out.println("状态1...参数"+sampleParameter); } }
=============情况B=================
package com.bitz.coin.benifit.test; public class StateB implements State { @Override public void handle(String sampleParameter) { System.out.println("状态B...参数:"+sampleParameter); } }
============情况C===============
package com.bitz.coin.benifit.test; public class StateC implements State { @Override public void handle(String sampleParameter) { System.out.println("情况C...参数:"+sampleParameter); } }