责任链模式

摘要

  本文通过简洁的模式描述,应用场景的详细代码实现,以及匹配的UML,详解介绍了责任链模式的原理及应用。本文可帮助读者快速掌握责任链模式,以便工作学习中使用责任链模式。

一、责任链模式

  在生活中,完成一项任务往往需要几个步骤,步骤有前后排序之分,同时一个任务的步骤是有可能发生变化的,比如增加一个步骤,减少一个步骤。
  编码源于生活,某个任务类的一个功能也常常是由几个步骤完成,如果将步骤写死在任务类中,后期步骤的变化会导致修改任务类,这就违背了“开闭原则”。
  责任链模式就是用于解决上面的问题。首先对任务类与步骤进行解耦,让步骤单独封装成类,任务类只需要知道需要哪些步骤类即可,但这也导致使用者必须清楚一个功能需要的步骤。责任链模式借鉴List数据结构,步骤之间用链式结构进行连接,步骤一的下一个是步骤二,步骤二的下一个是步骤三,依次类推。所以使用者只需要知道链头即可顺着链子执行到最后,而不用关心步骤二步骤三是什么。

二、责任链模式的实现

2.1 场景设计

  在KFC中,客户点汉堡的过程如下:
  第一步,汉堡下单
  第二步,KFC制作汉堡
  第三步,KFC前台叫号取餐

2.2 代码实现

2.2.1 HamburgerHandler 任务抽象类

package ft.patterns.responsibilityChain;

public abstract class HamburgerHandler {
	private HamburgerHandler nextHandler;
	
	public HamburgerHandler() {
		nextHandler = null;
	}
	
	public abstract void handler();
	
	public void nextHandler(HamburgerHandler nextHandler) {
		this.nextHandler = nextHandler;
	}
	
	public void doChain() {
		if(nextHandler != null) {
			nextHandler.handler();
		}
	}
}

2.2.2 HamburgerOder 步骤一具体类

package ft.patterns.responsibilityChain;

public class HamburgerOder extends HamburgerHandler {
	
	@Override
	public void handler() {
		System.out.println("oder hamburger is aleardy.");
		super.doChain();
	}
}

2.2.3 HamburgerBuild 步骤二具体类

package ft.patterns.responsibilityChain;

public class HamburgerBuild extends HamburgerHandler{
	@Override
	public void handler() {
		System.out.println("Build hamburger is aleady");
		super.doChain();
	}
}

2.2.4 HamburgerCalling 步骤三具体类

package ft.patterns.responsibilityChain;

public class HamburgerCalling extends HamburgerHandler{

	@Override
	public void handler() {
		System.out.println("Hamburger is calling client");
		super.doChain();
	}
}

2.2.5 Main 测试类

package ft.patterns.responsibilityChain;

public class Main {
	public static void main(String[] args) {
		HamburgerHandler oder = new HamburgerOder();
		HamburgerHandler build = new HamburgerBuild();
		HamburgerHandler calling = new HamburgerCalling();
		
		oder.nextHandler(build);
		build.nextHandler(calling);
		
		oder.handler();
	}
}

2.2.6 测试结果

oder hamburger is aleardy.
Build hamburger is aleady
Hamburger is calling client

三、责任链模式的UML图

责任链模式UML类图

发布了21 篇原创文章 · 获赞 0 · 访问量 1821
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章