package com.wuxiaolong.androidsamples.designpatterns; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import com.wuxiaolong.androidsamples.R; import com.wuxiaolong.androidutils.library.LogUtil; /** * 职责链模式 */ public class ChainOfResponsibilityActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_chain_of_responsibility); Handler projectManager = new ProjectManager(3); Handler departmentManager = new DepartmentManager(5); Handler generalManager = new GeneralManager(15); //创建职责链 projectManager.setNextHandler(departmentManager); departmentManager.setNextHandler(generalManager); //发起一次请求 projectManager.handleRequest(10); } /** * 抽象处理者 */ public static abstract class Handler { private Handler nextHandler; public int maxDay;// 当前领导能审批通过的最多天数 protected Handler(int maxDay) { this.maxDay = maxDay; } //设置责任链中下一个处理请求的对象 public void setNextHandler(Handler handler) { nextHandler = handler; } protected void handleRequest(int day) { if (day <= maxDay) { reply(day); } else { if (nextHandler != null) { //审批权限不够,继续上报 nextHandler.handleRequest(day); } else { LogUtil.d("没有更高的领导审批了"); } } } protected abstract void reply(int day); } /** * 项目经理 */ class ProjectManager extends Handler { public ProjectManager(int day) { super(day); } @Override protected void reply(int day) { LogUtil.d(day + "天请假,项目经理直接审批通过"); } } /** * 部门经理 */ class DepartmentManager extends Handler { public DepartmentManager(int day) { super(day); } @Override protected void reply(int day) { LogUtil.d(day + "天请假,部门经理审批通过"); } } /** * 总经理 */ class GeneralManager extends Handler { public GeneralManager(int day) { super(day); } @Override protected void reply(int day) { LogUtil.d(day + "天请假,总经理审批通过"); } } }