symbid/chainlink

此软件包已被废弃且不再维护。作者建议使用dms/chainlink软件包。

Chainlink提供了一个简单的责任链实现。

v0.4 2016-07-28 21:17 UTC

README

Latest Version Software License Build Status Coverage Status Quality Score Total Downloads

Chainlink是责任链模式的简单实现。它是一个库,帮助您避免样板代码,以便提供处理特定任务的责任链。

安装

Chainlink库已被拆分,因此实现链的Context类独立于这个库,而流行的框架的适配器和包装器则存在于单独的包中。

如果您只需要链实现,通过运行以下命令获取chainlink:

composer require dms/chainlink

如果您使用Symfony或其他框架,请检查Packagist以获取包装器和适配器。

使用

要使用chainlink,您只需要在处理器上实现HandlerInterface并将其注册到上下文中。

class MyHandler implements HandlerInterface
{
    // ... fulfill interface ...
}

$handler = new MyHandler();

// Create a Context to chain responsibilities
$context = new DMS\Chainlink\Context();
$context->addHandler($handler);

// Pass in an item to be handled
$context->handle($input);

// You can also get the handler as a return value
$handler = $context->getHandlerFor($input);

// You may have need of returning multiple handlers
$handler = $context->getAllHandlersFor($input);

处理器负责识别它负责哪个输入,接口中包含一个handles方法来调用它。

链处理顺序

有时影响哪个处理器首先被调用是有用的。addHandler支持一个可选的第二个参数,即优先级整数。链中的最高数字将首先被调用。

// Create a Context to chain responsibilities
$context = new DMS\Chainlink\Context();
$context->addHandler($handler1, 10);
$context->addHandler($handler2, 1000);
$context->addHandler($handler3);

// Pass in an item to be handled
$context->handle($input);

以下处理器将按顺序被调用(如果它们可以处理用例):$handler2 -> $handler1 -> $handler3