当前位置: 代码迷 >> 综合 >> 一条龙服务,总有一款适合你——责任链模式
  详细解决方案

一条龙服务,总有一款适合你——责任链模式

热度:56   发布时间:2024-01-30 05:00:24.0

责任链模式,重点在链字的理解。想象一下自行车的链条,环环相扣。

比如有个程序外包群,里边有使用各种语言的程序猿。假设现在有一个指定了某种编程语言的需求,肯定谁会这种编程语言,谁就去接受这个需求。

但是客户又不想一个个的去问,怎么办?这时候,群主想了个办法,把这些程序员随机或者按照某种规则链起来,需求来了之后,客户只需要把需求给了链条最开始的一个人,就可以了。具体谁接受了这个需求,客户不需要知道。

话也不多说,直接代码见:

/*** 定义抽象类,所有程序员的父类*/
public abstract class Programmer {private Programmer programmer;public void setNextProgrammer(Programmer programmer) {this.programmer = programmer;}public Programmer getNextProgrammer() {return programmer;}public abstract void doProgram(String language);}
public class GoProgrammer extends Programmer {@Overridepublic void doProgram(String language) {if ("go".equals(language)) {System.out.println("使用go语言处理完了");}else {Programmer nextProgrammer = getNextProgrammer();if (nextProgrammer != null) {getNextProgrammer().doProgram(language);}else {System.out.println("需求在这里不能实现");}}}
}
public class JavaProgrammer extends Programmer {@Overridepublic void doProgram(String language) {if ("java".equals(language)) {System.out.println("使用java语言处理完了");}else {Programmer nextProgrammer = getNextProgrammer();if (nextProgrammer != null) {getNextProgrammer().doProgram(language);}else {System.out.println("需求在这里不能实现");}}}
}
public class PHPProgrammer extends Programmer {@Overridepublic void doProgram(String language) {if ("php".equals(language)) {System.out.println("使用php语言处理完了");}else {Programmer nextProgrammer = getNextProgrammer();if (nextProgrammer != null) {getNextProgrammer().doProgram(language);}else {System.out.println("需求在这里不能实现");}}}
}

 

public class Main {public static void main(String[] args) throws IOException {//获取责任链Programmer chain = getChain();//提出各种需求System.out.println("go 需求?");chain.doProgram("go");System.out.println("php 需求?");chain.doProgram("php");System.out.println("java 需求?");chain.doProgram("java");System.out.println("kotlin 需求?");chain.doProgram("kotlin");}//群主帮忙排好序public static Programmer getChain() {Programmer java = new JavaProgrammer();Programmer php = new PHPProgrammer();Programmer go = new GoProgrammer();java.setNextProgrammer(php);php.setNextProgrammer(go);return java;}
}
结果:
go 需求?
使用go语言处理完了
php 需求?
使用php语言处理完了
java 需求?
使用java语言处理完了
kotlin 需求?
需求在这里不能实现