Decorator Pattern: Esnek ve Katmanlı Geliştirme

 


Decorator Pattern (Süsleyici Tasarım Deseni)
, mevcut bir nesnenin davranışını değiştirmeden, ona yeni özellikler eklememizi sağlar.

Yani sınıfı değiştirmeden, onu sarmalayarak (wrap) yeni işlevler kazandırırız.

Bu desen, özellikle katmanlı sistemlerde ya da bir işleme farklı davranışlar dinamik olarak eklemek istediğimizde kullanılır.


Neden Kullanılır?

  • Sınıfın içeriğini değiştirmeden işlevini genişletmek için

  • Kalıtım yerine bileşen kullanarak daha esnek kodlama yapmak için

  • Her ihtiyaca özel sınıf türetmek yerine, birleştirilebilir sınıflar yaratmak için


Gerçek Hayatta Kullanım Örnekleri

  • Laravel'de middleware sistemi (her request katman katman işlenir)

  • Logging sistemleri (veriye önce dosya logu, sonra veritabanı logu eklenebilir)

  • Online sipariş sistemleri (ürüne ekstra sos, boyut, vb. eklentiler)

  • HTML render işlemleri (bir metni bold, italic, underline gibi süslemek)



PHP ile Uygulamalı Örnek

Senaryo: Basit bir kahve sipariş sistemine eklemeler yapmak istiyoruz.


1. Interface

<?php
interface Coffee {
public function cost(): int;
public function description(): string;
}


2.Temel kahve sınıfını oluşturalım:


<?php
class BasicCoffee implements Coffee {
public function cost(): int {
return 10;
}

public function description(): string {
return "Sade Kahve";
}
}


3.Decorator sınıfı:


<?php
abstract class CoffeeDecorator implements Coffee {
protected $coffee;

public function __construct(Coffee $coffee) {
$this->coffee = $coffee;
}
}


4.Yeni özellikler ekleyen süsleyiciler:


<?php
class MilkDecorator extends CoffeeDecorator {
public function cost(): int {
return $this->coffee->cost() + 3;
}

public function description(): string {
return $this->coffee->description() . ", Süt";
}
}

class SugarDecorator extends CoffeeDecorator {
public function cost(): int {
return $this->coffee->cost() + 1;
}

public function description(): string {
return $this->coffee->description() . ", Şeker";
}
}



Kullanımı:

<?php
$coffee = new BasicCoffee();
$coffee = new MilkDecorator($coffee);
$coffee = new SugarDecorator($coffee);

echo $coffee->description(); // Sade Kahve, Süt, Şeker
echo $coffee->cost(); // 14



Avantajları

  • Kod tekrarını azaltır

  • Kalıtım yerine kompozisyon kullanır

  • Yeni işlevleri eski sınıfı değiştirmeden eklemenizi sağlar

  • Dinamik olarak davranış eklenebilir (çalışma anında)


Özet

  • Decorator Pattern, kodunuzu katmanlara bölerek esnek ve sürdürülebilir hale getirir.

  • Laravel, Symfony gibi framework’lerde sıkça kullanılır.

  • Karmaşık if-else yapılarından kaçınmak için oldukça idealdir.














Related Posts

Decorator Pattern: Esnek ve Katmanlı Geliştirme
4/ 5
Oleh