Java设计模式-状态模式/责任链模式
状态模式:以登录和未登录状态为例:
1.创建登录LoginContext
public class LoginContext { //这里采用内部类形式创建对象单例 public LoginContext(){ } public static LoginContext getInstance(){ return LoginHolder.INSTANCE; } private static class LoginHolder{ private static final LoginContext INSTANCE = new LoginContext(); } private UserStatus mUserStatus; /** * 设置当前用户的状态 * @param userStatus */ public void setUserStatus(UserStatus userStatus){ this.mUserStatus = userStatus; } /** * 用户行为 */ public void forward(){ if (mUserStatus != null){ mUserStatus.forward(); } } public void commit(){ if (mUserStatus != null){ mUserStatus.commit(); } } }
2.创建用户可执行的状态接口
/** * 用户可执行的状态 */ public interface UserStatus { public void forward(); public void commit(); }
3.创建用户登录状态实例(只有用户已经登录,实际行为方法调用才会执行)
/** * 用户登录状态 */ public class LoginStatus implements UserStatus { @Override public void forward() { } @Override public void commit() { } }
4.创建用户未登录状态实例
/** * 用户未登录状态 * 行为操作都会执行提示用户登录操作 */ public class LogoutStatus implements UserStatus { @Override public void forward() { } @Override public void commit() { } }
5.实际调用
//获取当前抽象状态实例 LoginContext mLoginContext = LoginContext.getInstance(); //设置当前用户登录状态 mLoginContext.setUserStatus(new LogoutStatus()); //执行用户行为 mLoginContext.forward();
责任链模式:
//定义抽象服务处理者 public abstract class ServiceHandler { //定义两个抽象方法来确定实际对象的行为和属性 public abstract int level(); public abstract void handle(int size); protected ServiceHandler nextHandler; public final void handRequest(int size){ //如果当前需求等级小于服务限制等级,即代表当前服务可进行处理 //否则,交与下以等级服务来进行等级判断或是处理 if (size < level()){ handle(size); }else{ if (nextHandler != null){ nextHandler.handRequest(size); } } } }
//normal ServiceHandler public class NormalService extends ServiceHandler { @Override public int level() { return 0; } @Override public void handle(int size) { //doSomething } } //large ServiceHandler public class LargeService extends ServiceHandler { @Override public int level() { return 5; } @Override public void handle(int size) { //doSomething } }
//use ServiceHandler serviceHandler = new NextMajor(); NormalService normalService = new NormalService(); LargeService largeService = new LargeService(); serviceHandler.nextHandler = normalService; normalService.nextHandler = largeService; serviceHandler.handRequest(3);
下一篇:
java中常见的数据结构(了解)