22

java设计模式~责任链模式

 5 years ago
source link: http://www.cnblogs.com/lori/p/11798236.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

责任链,我感觉对就根据需求动态的组织一些工作流程,比如完成一件事有5个步骤,而第1步,第2步,第3步它们的顺序可以在某些时候是不固定的,而这就符合责任链的范畴,我们根据需求去设计我们的这些链条,去自己指定它们的执行顺序,下面看我的一个例子。

出现的对象

  • 抽象责任
  • 具体责任
  • 抽象链条
  • 具体链条

对象的解释

  • 抽象责任,也可以说是一个行为,它规定的这类行为的签名
  • 具体责任,去实现抽象责任,它就是我们上面说的每个步骤的实现
  • 抽象链条,它将会去初始化你的责任链条,提供外部调用链条的入口,但没有具体指定链条的顺序
  • 具体链条,只负责指定这些链条的顺序

代码实现

抽像责任

public abstract class ChainHandler {
    private ChainHandler next;

    public abstract void execute(HandlerParameters parameters);

    public ChainHandler getNext() {
        return next;
    }

    public ChainHandler setNext(ChainHandler next) {
        this.next = next;
        return this.next;
    }

    /**
     * 链条的处理方法,单向链表的遍历。
     *
     * @param handlerParameters
     */
    public void ProcessRequest(ChainHandler command, HandlerParameters handlerParameters) {
        if (command == null) {
            throw new IllegalArgumentException("请先使用setCommand方法去注册命令");
        }
        command.execute(handlerParameters);

        // 递归处理下一级链条
        if (command.getNext() != null) {
            ProcessRequest(command.getNext(), handlerParameters);
        }
    }
}

具体责任

public class CreateService extends ChainHandler {
    @Override
    public void execute(HandlerParameters parameters) {
        System.out.println("建立");
    }
}

public class EditService extends ChainHandler {
    @Override
    public void execute(HandlerParameters parameters) {
        System.out.println("编辑");
    }
}

public class RemoveService extends ChainHandler {
    @Override
    public void execute(HandlerParameters parameters) {
        System.out.println("删除");
    }
}

抽象链条

/**
 * 责任链流程处理者.
 */
public abstract class WorkFlow {
  private ChainHandler command;

  public WorkFlow() {
    this.command = getChainHandler();
  }

  protected abstract  ChainHandler getChainHandler();
  /**
   * 链条的处理方法,单向链表的遍历。
   *
   * @param handlerParameters
   */
  public void ProcessRequest(HandlerParameters handlerParameters) {
    if (command == null) {
      throw new IllegalArgumentException("请先使用setCommand方法去注册命令");
    }
    command.execute(handlerParameters);

    // 递归处理下一级链条
    if (command.getNext() != null) {
      command = command.getNext();
      ProcessRequest(handlerParameters);
    }
  }
}

具体链条

/**
 * 第一个责任链条.
 */
public class WorkFlow1 extends WorkFlow {
  @Override
  protected ChainHandler getChainHandler() {
    ChainHandler chainHandler = new CreateService();
    chainHandler.setNext(new EditService())
        .setNext(new RemoveService())
        .setNext(new ReadService());
    return chainHandler;
  }

}

测试

@Test
    public void chainFlow1() {
        WorkFlow workFlow = new WorkFlow1();
        workFlow.ProcessRequest(new HandlerParameters("doing", "test"));
    }

结果

建立
编辑
删除
读取

Recommend

  • 117
    • 掘金 juejin.im 7 years ago
    • Cache

    我的Java设计模式-责任链模式

    今天来说说程序员小猿和产品就关于需求发生的故事。前不久,小猿收到了产品的需求。 产品经理:小猿,为了迎合大众屌丝用户的口味,我们要放一张图,要露点的。 小猿:......露点?你大爷的,让身为正义与纯洁化身的我做这种需求,还露点。 产品经理:误会误会,是...

  • 107
    • www.sunnyang.com 6 years ago
    • Cache

    Java设计模式-责任链模式

    责任链模式又称为职责链模式,在23种设计模式中归类为行为型模式。行为型模式可以分为类行为型模式和对象行为型模式。 类行为型模式使用继承关系在几个类之间分配行为,类行为型模式主要通过多态等方式来分配父类与子类的职责。

  • 73
    • coderlengary.github.io 6 years ago
    • Cache

    设计模式之责任链模式

    职责链模式(Chain of Responsibility):使多个对象都有机会处理同一个请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 在日常生活中,这种情景...

  • 29
    • studygolang.com 4 years ago
    • Cache

    14.Golang设计模式之责任链模式

    责任链模式 GitHub代码链接 1. 简介 Chain of Responsibility Pattern为请求创建一个接受者对...

  • 7
    • jiajunhuang.com 4 years ago
    • Cache

    Go设计模式: 责任链模式

    Go设计模式: 责任链模式 今天我们来介绍责任链模式,从名字可以看出来,它应当是一系列的操作。的确如此,看看维基百科的定义: 责任链模式在面向对象程式设计里是一种软件设计模式,它包含了一些命令对象和一系列的处理对象。...

  • 18

    手撸golang 行为型设计模式 责任链模式 缘起 最近复习设计模式 拜读谭勇德的<<设计模式就该这样学>> 本系列笔记拟采用golang练习之 责任链模式 责任链模式(Chain of...

  • 4
    • www.cnblogs.com 3 years ago
    • Cache

    设计模式-责任链模式

    设计模式-责任链模式 作为一个上班族,我们可能会经常听到“管理流程混乱”,“职责边界...

  • 7

    使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间耦合关系,将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止Chain of Responsibility模式的应用场合在于“一个请求可能有多个接受者,但是最后真正的接受者只有...

  • 23

    写在前面记录学习设计模式的笔记提高对设计模式的灵活运用学习地址https://www.bilibili.com/vide...

  • 3

    责任链模式(Chain Of Responsibility Design Pattern),也叫做职责链,是将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK