行为型模式~责任链模式

定义:

使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。

责任链重点在于链上,由一条链处理相似请求,在链中决定谁来处理这个请求,并返回相应的结果。

角色:

  1. 抽象处理者角色:该角色对请求进行抽象,定义一个方法以设定和返回对下一个处理者的引用
  2. 具体处理者角色:该角色接到请求后,可以选择将请求处理掉,或者将请求传给下一个处理者,由于具体处理者持有对下一个处理者的引用,因此如果需要,具体处理者可以访问下一个处理者

优点:

  1. 将请求和处理分开,请求者不知道是谁处理的,处理者可以不用知道请求的全貌
  2. 提高系统灵活性

缺点:

  1. 降低程序性能
  2. 不易于调试
  3. 结点需要控制,避免出现超长链情况

场景:

  1. 一个业务需要一系列的处理工作
  2. 业务流的处理,例如文件审批
  3. 对系统进行补充扩展

实例:击鼓传花

抽象处理角色定义规则,定义下一个,定义共同方法

package 责任链模式;

public abstract class Player {
	private Player people;
	public abstract void handle(int i);
	protected void setpeople(Player peo){
		this.people = peo;
	}
	public void next(int i){
		if(people !=null){
			people.handle(i);
		}else{
			System.out.println("游戏结束");
		}
	}
}
package 责任链模式;

public class P1 extends Player{

	public P1(Player p){
		this.setpeople(p);
	}
	@Override
	public void handle(int i) {
		// TODO 自动生成的方法存根
		if(i==1){
			System.out.println("p1喝酒");
		}else{
			System.out.println("p1传花");
			this.next(i);
		}
	}

}
package 责任链模式;

public class P2 extends Player{
	public P2(Player p){
		this.setpeople(p);
	}
	@Override
	public void handle(int i) {
		// TODO 自动生成的方法存根
		if(i==2){
			System.out.println("P2喝酒");
		}else{
			System.out.println("P2传花");
			this.next(i);
		}
	}
}

P3。。。。

package 责任链模式;

public class Main {
 public static void main(String []args) {
	 	Player player = new P1(new P2(new P3(new P4(new P5(null)))));
	 	player.handle(4);
 	}
}

p1传花
P2传花
P3传花
P4喝酒

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值