当我们的请求根据不同的情况需要不同的处理者处理的时候,可以使用该模式,将多个处理者和请求者隔离,只暴露一个处理者,当满足处理条件时处理,不满足时将请求传递,类似于Android的事件分发机制。
类图:
java实现
public abstract class AbsHandle {
private AbsHandle absHandle;
public final void handleMessage(Request request){
if(this.getHandleLevel() == request.getRequestLevel()){
this.doSomething();
}else{
if(absHandle != null){
absHandle.handleMessage(request);
}else{
}
}
}
public void setHandle(AbsHandle absHandle){
this.absHandle = absHandle;
}
public abstract int getHandleLevel();
public abstract void doSomething();
}
public class RealHandle extends AbsHandle {
@Override
public int getHandleLevel() {
return 1;
}
@Override
public void doSomething() {
}
}
public class RealHandle1 extends AbsHandle {
@Override
public int getHandleLevel() {
return 2;
}
@Override
public void doSomething() {
}
}
public class Request {
public int getRequestLevel(){
return 1;
}
}
public class Client {
public static void main(String[] args){
RealHandle realHandle = new RealHandle();
RealHandle1 realHandle1 = new RealHandle1();
realHandle.setHandle(realHandle1);
realHandle.handleMessage(new Request());
}
}
php实现
<?php
abstract class AbsHandle
{
public $handle;
public function __set($key,$value)
{
if('handle' == $value)
{
$this->handle = $value;
}
}
public final function handleMessage(Request $request)
{
if($this->getRequestLevel() == $request->getRequestLevel())
{
$this->doSomething();
}
else
{
if(!empty($handle))
{
$this->handle->handleMessage();
}
else
{
}
}
}
public abstract function doSomething();
public abstract function getHandleLevel();
}
class Request
{
public function getRequestLevel()
{
return 1;
}
}
class RealHandle extends AbsHandle
{
public function doSomething()
{
}
public function getHandleLevel()
{
return 1;
}
}