Visitor (ziyaretçi) tasarım şablonu davranışsal (Behavioral Patterns) tasarım şablonları gurubunda yer alır. Bu tasarımın kullanılmasının amacı birleşik bir yapı üzerine yeni methodların eklenmesidir.
Bir sınıfa yeni method eklememiz gerektiğini düşünelim eğer bu programımızın tasarımını bozacak ise visitor tasarım şablonunu kullanabiliriz. Visitor tasarım şablonu işlevsellik açısından decorator tasarım şablonuna benzerlik gösterir.

visite sınıflarımız
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | abstract class Visite { abstract function accept(Visitor $obj); } class AVisite extends Visite { private $title; function __construct($title_in) { $this->title = $title_in; } function get() { return $this->title; } function accept(Visitor $obj) { $obj->visit($this); } } class BVisite extends Visite { private $title; function __construct($title_in) { $this->title = $title_in; } function get() { return $this->title; } function accept(Visitor $obj) { $obj->visit($this); } } |
visitor sınıflarımız
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | abstract class Visitor { abstract function visit(Visite $obj); } class AVisitor extends Visitor { private $title = NULL; function get() { return $this->title; } function set($title) { $this->title = $title; } function visit(Visite $obj) { $this->set($obj->get().' << Avisitor >>'); } } class BVisitor extends Visitor { private $title = NULL; function get() { return $this->title; } function set($title) { $this->title = $title; } function visit(Visite $obj) { $this->set($obj->get().' << Bvisitor >>'); } } |
şimdi sınıfı nasıl kullanacağımıza bakalım
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | $AVisite = new AVisite('A Visite'); $BVisite = new BVisite('B Visite'); $AVisitor = new AVisitor(); $AVisite->accept($AVisitor); echo $AVisitor->get().'<br>'; $BVisite->accept($AVisitor); echo $AVisitor->get().'<br>'; $BVisitor = new BVisitor(); $BVisite->accept($BVisitor); echo $BVisitor->get().'<br>'; $BVisite->accept($BVisitor); echo $BVisitor->get(); |
ekran çıktısı
A Visite << Avisitor >
B Visite << Avisitor >
B Visite << Bvisitor >
B Visite << Bvisitor >
kodları toplu bir sekilde tekrar yazalım
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | <?php abstract class Visite { abstract function accept(Visitor $obj); } class AVisite extends Visite { private $title; function __construct($title_in) { $this->title = $title_in; } function get() { return $this->title; } function accept(Visitor $obj) { $obj->visit($this); } } class BVisite extends Visite { private $title; function __construct($title_in) { $this->title = $title_in; } function get() { return $this->title; } function accept(Visitor $obj) { $obj->visit($this); } } abstract class Visitor { abstract function visit(Visite $obj); } class AVisitor extends Visitor { private $title = NULL; function get() { return $this->title; } function set($title) { $this->title = $title; } function visit(Visite $obj) { $this->set($obj->get().' << Avisitor >>'); } } class BVisitor extends Visitor { private $title = NULL; function get() { return $this->title; } function set($title) { $this->title = $title; } function visit(Visite $obj) { $this->set($obj->get().' << Bvisitor >>'); } } $AVisite = new AVisite('A Visite'); $BVisite = new BVisite('B Visite'); $AVisitor = new AVisitor(); $AVisite->accept($AVisitor); echo $AVisitor->get().'<br>'; $BVisite->accept($AVisitor); echo $AVisitor->get().'<br>'; $BVisitor = new BVisitor(); $BVisite->accept($BVisitor); echo $BVisitor->get().'<br>'; $BVisite->accept($BVisitor); echo $BVisitor->get(); ?> |
dosya : visitor design pattern
benzer konular:
- builder design pattern – php
- composite design pattern – php
- decorator design pattern – php
- template method design pattern – php
- adapter design pattern – php
- bridge design pattern – php
- iterator design pattern – php
- strategy design pattern – php
- chain of responsibility design pattern- php
- command design pattern – php














design patterns