25 / 06 / 2009

prototype design pattern – php

ekleyen: Emre Çevik kategori: design patterns| php

Prototype (prototip) tasarım şablonu, daha önceki yazımda anlatmış olduğum factory tasarım şablonu gibi yeni sınıflar yaratmaya yarıyor ama aralarındaki fark factory ile sıfırdan bir sınıf oluştururken, prototype ile varolan bir sınıfın kopyasını oluşturuyoruz.

prototype, factory ve diğer tasarım şablonlarına göre projelerde daha az kullanılmaktadır ancak bazen çok faydalı olabilir. büyük bir projedeki bazı sınıfların sıfırdan oluşturulması, zaman açısından uzun sürebilir fakat biz bunu prototype ile klonlar ve gerekli yerlerini kendimize göre değiştirirsek zaman açısından çok büyük fayda sağlayabiliriz. ayrıca bu şekilde hem diğer sınıf üzerinde çalışmamış onu korumuş, hemde yeni bir sınıf yaratma zahmetine girmeden işimizi çözmüş oluyoruz.

peki neden bir kopya oluşturalım ?

düşününkü bir siteniz var ve bu siteye üye olanların bilgilerini bir sınıfta tutuyorsunuz. ve siteniz değişik modüllere sahip. bazı modüllerde değişik kullanıcı bilgilerini kullanmanız gerekiyor. işte tam bu noktada prototype yardımımıza yetişiyor. gerekli bilgileri değiştirerek hem eski sınıfımızı koruyoruz hemde, hemde yeni sınıf yaratmadan istediğimiz sınıfa ulaşıyoruz.

bu kadar açıklamadan sonra şimdi prototype sınıfımızı yapmaya başlayabiliriz.

öncelikle 2 adet sınıf olusturuyoruz A ve B diye. bu sınıflardan prototype sınıfı ile yeni sınıflar türeteceğiz.

prototype

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class A extends Prototype 
{
    function __construct() 
    {
        $this->topic = 'A Prototype';
    }
    function __clone() {}
}
 
class B extends Prototype 
{
    function __construct() 
    {
        $this->topic = 'B Prototype';
    }
    function __clone() {}
}

şimdi prototype sınıfımızı oluşturabiliriz.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
abstract class Prototype 
{
    protected $title;
    protected $topic;
    abstract function __clone();
    function getTitle() 
    {
        return $this->title;
    }
    function setTitle($titleIn) 
    {
        $this->title = $titleIn;
    }
    function getTopic() 
    {
        return $this->topic;
    }
}

ş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
18
19
20
21
22
23
24
25
  writeln($B->getTopic());
  writeln($B->getTitle());
 
  $yeni_b = clone $B;
  $yeni_b->setTitle('B den klon olusturduk');
  writeln($yeni_b->getTopic());
  writeln($yeni_b->getTitle());
  writeln('');
 
  $yeni_a = clone $A;
  $yeni_a->setTitle('A dan klon olusturduk');
  writeln($yeni_a->getTopic());
  writeln($yeni_a->getTitle());
  writeln('');
 
  $en_yeni_b = clone $B;
  $en_yeni_b->setTitle('B den yeni bir klon olusturduk');
  writeln($en_yeni_b->getTopic());
  writeln($en_yeni_b->getTitle());
  writeln('');
 
  $en_yeni_a = clone $yeni_a;
  $en_yeni_a->setTitle('Yeni A dan klon olusturduk');
  writeln($en_yeni_a->getTopic());
  writeln($en_yeni_a->getTitle());

bu uygulamanın ekran çıktısı aşağıdaki gibidir.

B Prototype

B Prototype
B den klon olusturduk

A Prototype
A dan klon olusturduk

B Prototype
B den yeni bir klon olusturduk

A Prototype
Yeni A dan klon olusturduk

yukarıdaki ekran çıktısında gördüğünüz gibi A ve B sınıflarından yeni_a , yeni_b, en_yeni_a ve en_yeni_b olmak üzere 4 tane daha sınıf türettik ve sınıf sayımız 6 ya çıktı.

kodları düzenli bir şekilde yazarsak

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
<?php
 
abstract class Prototype 
{
    protected $title;
    protected $topic;
    abstract function __clone();
    function getTitle() 
    {
        return $this->title;
    }
    function setTitle($titleIn) 
    {
        $this->title = $titleIn;
    }
    function getTopic() 
    {
        return $this->topic;
    }
}
 
class A extends Prototype 
{
    function __construct() 
    {
        $this->topic = 'A Prototype';
    }
    function __clone() {}
}
 
class B extends Prototype 
{
    function __construct() 
    {
        $this->topic = 'B Prototype';
    }
    function __clone() {}
}
 
 
  $A = new A();
  $B = new B();
 
 
  writeln($B->getTopic());
  writeln($B->getTitle());
 
  $yeni_b = clone $B;
  $yeni_b->setTitle('B den klon olusturduk');
  writeln($yeni_b->getTopic());
  writeln($yeni_b->getTitle());
  writeln('');
 
  $yeni_a = clone $A;
  $yeni_a->setTitle('A dan klon olusturduk');
  writeln($yeni_a->getTopic());
  writeln($yeni_a->getTitle());
  writeln('');
 
  $en_yeni_b = clone $B;
  $en_yeni_b->setTitle('B den yeni bir klon olusturduk');
  writeln($en_yeni_b->getTopic());
  writeln($en_yeni_b->getTitle());
  writeln('');
 
  $en_yeni_a = clone $yeni_a;
  $en_yeni_a->setTitle('Yeni A dan klon olusturduk');
  writeln($en_yeni_a->getTopic());
  writeln($en_yeni_a->getTitle());
 
 
 
  function writeln($line_in) {
    echo $line_in."<br/>";
  }
 
?>

Benim anlatacaklarım bu kadar. Aşağıdaki sayfalardan daha ayrıntılı bilgiler alabilirsiniz.

Cookie Pattern : Prototype
PHP and the Prototype Pattern
Data Validation System with the Prototype
The Basics of Using the Prototype

dosya : prototype design pattern
  • Digg
  • del.icio.us
  • Facebook
  • Google
  • BlinkList
  • blogmarks
  • description
  • Furl
  • Ma.gnolia
  • NewsVine
  • Reddit
  • Technorati

benzer konular:

  1. singleton design pattern – php
  2. state design pattern – php
  3. factory method design pattern – php
  4. proxy design pattern – php
  5. composite design pattern – php
  6. decorator design pattern – php
  7. builder design pattern – php
  8. adapter design pattern – php
  9. strategy design pattern – php
  10. visitor design pattern – php


(2 votes, average: 5.00 out of 5)
Loading ... Loading ...

2 yorum

1 | anov

25 / 06 / 2009 - 19:20

Avatar

Prototype, özellikle elimizde başkası tarafından yapılmış bir nesne varsa ve onu bozmak istemiyorsak faydalı oluyor. Örneğin asp.net teki membership sistemi üzerine yeni bir özellik eklemek istedik, onu türetip, yeni işlevleri olan bir sınıf oluşturabiliyoruz.

Ek olarak, prototype bazen genişletme amacı taşımayabilir. Bir prototip, sadece kendisinden türeyeceklere bir örnek oluştursun diye de yazılabilir.

Yazı sade ve güzel olmuş. Teşekkürler.

2 | Emre Çevik

26 / 06 / 2009 - 02:09

Avatar

bende açıklama için teşekkür ederim.

yorum yaz

ne yapıyoruz

eğleniyoruz?

anket

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

sonuçlar

Loading ... Loading ...