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.

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 olusturdukA Prototype
A dan klon olusturdukB Prototype
B den yeni bir klon olusturdukA 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
benzer konular:














design patterns