symbid / chainlink
v0.4
2016-07-28 21:17 UTC
Requires
- php: >=5.4.0
Requires (Dev)
- mockery/mockery: 0.9.*
- phpunit/phpunit: ~4.5
- scrutinizer/ocular: ~1.1
This package is auto-updated.
Last update: 2021-04-29 19:23:55 UTC
README
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