Java设计模式-责任链模式

最近学习到设计模式,现总结个人学习备责任链模式内容【注重的是每一个对象对其下个对象的引用】。
上一篇:Java设计模式-备忘录模式

文章目录

  • 定义
  • 优缺点
    • 优点
    • 缺点
  • 实现
    • 代码
    • 测试

定义

对象由每一个对象对其下家的引用而连接起来形成一条链,即责任链。职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了。

优缺点

优点

  • 简化了对象。使得对象不需要知道链的结构。【链中的每一个节点不需要知道其他节点的内部形态】
  • 增强给对象指派职责的灵活性。通过改变链内的成员或者调动它们的次序,允许动态地新增或者删除责任。
  • 增加新的请求处理类很方便。【链条上添加节点,仅处理自己的逻辑即可】

缺点

  • 不能保证请求一定被接收。【每一个节点负责行为,可能一个类的行为出错整个链条崩溃】
  • 系统性能将受到一定影响,而且在进行代码调试时不太方便,可能会造成循环调用。

实现

代码

Java设计模式-责任链模式_第1张图片
角色:

  • 链条节点抽象类:定义了抽象行为,以及定义了存放链的下一个节点的引用【类似指针指向下一个节点】。
  • 具体节点:对抽象行为的实现。
/**链条节点的抽象类
 * 链的关键记录链的下一个人,以及执行链的行为
 * @author cc百川
 */
public abstract class Chain {
	Chain nextnode;//存储下一个节点
	String nodename;//节点名称
	public Chain( String nodename) { 
		this.nodename = nodename;
	}
	public  Chain setNextNode(Chain nextnode) {
		this.nextnode = nextnode;
		return this;
	}
	public abstract void doChain(User user);

} 
/** 乡村游医 【假定级别】
 * @author cc百川
 */
class VillageDoctor extends Chain{ 
	public VillageDoctor(String appname) {super( appname);}
	@Override
	public void doChain(User user) {
		if(user.grade <= 1) {
			System.out.println(this.nodename+"鉴定【"+user.username+"】 体温正常级别无需吃药。");
		} else if(user.grade >=2 && user.grade <5) {
			System.out.println(this.nodename+"鉴定【"+user.username+"】 属于普通发烧,吃一些处方药即可。");
		} else {
			nextnode.doChain(user);
		}
	}
}
/** 名医【假定高于游医】
 * @author cc百川
 */
class FamousDoctor  extends Chain{ 
	public FamousDoctor(String appname) {super( appname);}
	@Override
	public void doChain(User user) {
		 if  (user.grade >=5 && user.grade <8) {
			System.out.println(this.nodename+"鉴定【"+user.username+"】 属于普通流感,住院治疗即可。");
		} else {
			nextnode.doChain(user);
		}
	}
}
/** 宫廷名医【假定高于名医】
 * @author cc百川
 */
class CourtDoctor extends Chain{ 
	public CourtDoctor(  String appname) {super( appname); }
	@Override
	public void doChain(User user) {
		 if  (user.grade >=8 && user.grade <=10) {
			System.out.println(this.nodename+"鉴定【"+user.username+"】 属于病毒性流感,需要隔离观察。");
		} else {
			nextnode.doChain(user);
		}
	}
}

测试

public class Test {
	public static void main(String[] args) {
		CourtDoctor thosp = new CourtDoctor("宫廷御医云中君");
		FamousDoctor shosp = new FamousDoctor("端木蓉名医");
		VillageDoctor chosp = new VillageDoctor("道家游医逍遥子");
		chosp.setNextNode(shosp);
		shosp.setNextNode(thosp);
		thosp.setNextNode(chosp);
		
		chosp.doChain(new User("韩非", 2));
		chosp.doChain(new User("鬼谷子", 7));
		chosp.doChain(new User("雪女", 8));
	}
}

Java设计模式-责任链模式_第2张图片


责任链模式,重点在于每一个对象对其下个对象的引用,从而仅链式处理。
以上仅为个人学习,如果错误望指出,谢谢。

你可能感兴趣的:(#,Java设计模式)