The Visitor Pattern lets you outsource operations on objects to other objects. The main reason to do this is to keep a separation of concerns. But classes have to define a contract to allow visitors (the Role::accept
method in the example).
The contract is an abstract class but you can have also a clean interface. In that case, each Visitor has to choose itself which method to invoke on the visitor.
You can also find this code on GitHub
RoleVisitor.php
RoleVisitor.php
RecordingVisitor.php
RecordingVisitor.php
Role.php
Role.php
User.php
User.php
Group.php
Group.php
Tests/VisitorTest.php
Tests/VisitorTest.php