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);

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值