03 / 07 / 2009

visitor design pattern – php

ekleyen: Emre Çevik kategori: design patterns| php

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.

visitor

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
  • Digg
  • del.icio.us
  • Facebook
  • Google
  • BlinkList
  • blogmarks
  • description
  • Furl
  • Ma.gnolia
  • NewsVine
  • Reddit
  • Technorati

benzer konular:

  1. builder design pattern – php
  2. composite design pattern – php
  3. decorator design pattern – php
  4. template method design pattern – php
  5. adapter design pattern – php
  6. bridge design pattern – php
  7. iterator design pattern – php
  8. strategy design pattern – php
  9. chain of responsibility design pattern- php
  10. command design pattern – php


(No Ratings Yet)
Loading ... Loading ...

henüz yorum yazılmadı

yorum yaz

ne yapıyoruz

eğleniyoruz?

anket

design pattern yazılarını nasıl buldunuz?

sonuçlar

Loading ... Loading ...