ariestamirra

visitor

Aug 2nd, 2017
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.92 KB | None | 0 0
  1.  <?php
  2. abstract class Visitee
  3. {
  4.     abstract function accept(Visitor $visitorIn);
  5. }
  6. class BookVisitee extends Visitee
  7. {
  8.     private $author;
  9.     private $title;
  10.     function __construct($title_in, $author_in)
  11.     {
  12.         $this->author = $author_in;
  13.         $this->title  = $title_in;
  14.     }
  15.     function getAuthor()
  16.     {
  17.         return $this->author;
  18.     }
  19.     function getTitle()
  20.     {
  21.         return $this->title;
  22.     }
  23.     function accept(Visitor $visitorIn)
  24.     {
  25.         $visitorIn->visitBook($this);
  26.     }
  27. }
  28. class SoftwareVisitee extends Visitee
  29. {
  30.     private $title;
  31.     private $softwareCompany;
  32.     private $softwareCompanyURL;
  33.     function __construct($title_in, $softwareCompany_in, $softwareCompanyURL_in)
  34.     {
  35.         $this->title              = $title_in;
  36.         $this->softwareCompany    = $softwareCompany_in;
  37.         $this->softwareCompanyURL = $softwareCompanyURL_in;
  38.     }
  39.     function getSoftwareCompany()
  40.     {
  41.         return $this->softwareCompany;
  42.     }
  43.     function getSoftwareCompanyURL()
  44.     {
  45.         return $this->softwareCompanyURL;
  46.     }
  47.     function getTitle()
  48.     {
  49.         return $this->title;
  50.     }
  51.     function accept(Visitor $visitorIn)
  52.     {
  53.         $visitorIn->visitSoftware($this);
  54.     }
  55. }
  56. abstract class Visitor
  57. {
  58.     abstract function visitBook(BookVisitee $bookVisitee_In);
  59.     abstract function visitSoftware(SoftwareVisitee $softwareVisitee_In);
  60. }
  61. class PlainDescriptionVisitor extends Visitor
  62. {
  63.     private $description = NULL;
  64.     function getDescription()
  65.     {
  66.         return $this->description;
  67.     }
  68.     function setDescription($descriptionIn)
  69.     {
  70.         $this->description = $descriptionIn;
  71.     }
  72.     function visitBook(BookVisitee $bookVisiteeIn)
  73.     {
  74.         $this->setDescription($bookVisiteeIn->getTitle() . '. written by
  75. ' . $bookVisiteeIn->getAuthor());
  76.     }
  77.     function visitSoftware(SoftwareVisitee $softwareVisiteeIn)
  78.     {
  79.         $this->setDescription($softwareVisiteeIn->getTitle() . '. made by ' . $softwareVisiteeIn->getSoftwareCompany() . '. website at ' . $softwareVisiteeIn->getSoftwareCompanyURL());
  80.     }
  81. }
  82. class FancyDescriptionVisitor extends Visitor
  83. {
  84.     private $description = NULL;
  85.     function getDescription()
  86.     {
  87.         return $this->description;
  88.     }
  89.     function setDescription($descriptionIn)
  90.     {
  91.         $this->description = $descriptionIn;
  92.     }
  93.     function visitBook(BookVisitee $bookVisiteeIn)
  94.     {
  95.         $this->setDescription($bookVisiteeIn->getTitle() . '...!*@*! written !*! by !@! ' . $bookVisiteeIn->getAuthor());
  96.     }
  97.     function visitSoftware(SoftwareVisitee $softwareVisiteeIn)
  98.     {
  99.         $this->setDescription($softwareVisiteeIn->getTitle() . '...!!! made !*! by !@@! ' . $softwareVisiteeIn->getSoftwareCompany() . '...www website !**! at http://' . $softwareVisiteeIn->getSoftwareCompanyURL());
  100.     }
  101. }
  102. writeln('BEGIN TESTING VISITOR PATTERN');
  103. writeln('');
  104. $book         = new BookVisitee('Design Patterns', 'Gamma, Helm, Johnson, and
  105. Vlissides');
  106. $software     = new SoftwareVisitee('Zend Studio', 'Zend Technologies', 'www.zend.com');
  107. $plainVisitor = new PlainDescriptionVisitor();
  108. acceptVisitor($book, $plainVisitor);
  109. writeln('plain description of book: ' . $plainVisitor->getDescription());
  110. acceptVisitor($software, $plainVisitor);
  111. writeln('plain description of software: ' . $plainVisitor->getDescription());
  112. writeln('');
  113. $fancyVisitor = new FancyDescriptionVisitor();
  114. acceptVisitor($book, $fancyVisitor);
  115. writeln('fancy description of book: ' . $fancyVisitor->getDescription());
  116. acceptVisitor($software, $fancyVisitor);
  117. writeln('fancy description of software: ' . $fancyVisitor->getDescription());
  118. writeln('END TESTING VISITOR PATTERN');
  119. //double dispatch any visitor and visitee objects
  120. function acceptVisitor(Visitee $visitee_in, Visitor $visitor_in)
  121. {
  122.     $visitee_in->accept($visitor_in);
  123. }
  124. function writeln($line_in)
  125. {
  126.     echo $line_in . "<br/>";
  127. }
  128. ?>
Advertisement
Add Comment
Please, Sign In to add comment