Exemple #1
0
}
//对象结构
class ObjectStructure
{
    public $elementList = array();
    public function addElement(Element $element)
    {
        $this->elementList[spl_object_hash($element)] = $element;
    }
    public function delElement(Element $element)
    {
        unset($this->elementList[spl_object_hash($element)]);
    }
    public function accept(Visitor $visitor)
    {
        foreach ($this->elementList as $element) {
            $element->accept($visitor);
        }
    }
}
//客户端代码
$objectStructure = new ObjectStructure();
//对象结构
$objectStructure->addElement(new ConcreteElementA('男人'));
$objectStructure->addElement(new ConcreteElementA('女人'));
$va = new ConcreteVisitorA('成功');
$vb = new ConcreteVisitorB('失败');
$vc = new ConcreteVisitorC('恋爱');
$objectStructure->accept($va);
$objectStructure->accept($vb);
$objectStructure->accept($vc);
        array_push($this->obj, $ele);
    }
    /**
     *     *处理请求
     *         *@param $visitor Visitor
     *             */
    public function handleRequest(Visitor $visitor)
    {
        //遍历对象结构中的元素,接受访问
        foreach ($this->obj as $ele) {
            $ele->accept($visitor);
        }
    }
}
/*测试*/
header('Content-Type: text/html; charset=utf-8');
//对象结构
$os = new ObjectStructure();
//添加元素
$ele1 = new EnterpriseCustomer();
$ele1->name = 'ABC集团';
$os->addElement($ele1);
$ele2 = new EnterpriseCustomer();
$ele2->name = 'DEF集团';
$os->addElement($ele2);
$ele3 = new PersonalCustomer();
$ele3->name = '张三';
$os->addElement($ele3);
//客户提出服务请求
$serviceVisitor = new ServiceRequestVisitor();
$os->handleRequest($serviceVisitor);