Factory Tasarım Kalıbında kullandığım örneği Strategy tasarım kalıbını da işin içine katarak genişletelim.
Evvela tekrardan bir “Car” interface’i oluşturulalım. Sonra bu interface’den diğer arabalarımızı implement edeceğiz.
<?php
interface Car
{
public function arabayiSur(): string;
}
Daha sonra Tofas ve Mercedes arabalarımızı implement edelim aşağıdaki gibi:
class Tofas implements Car
{
public function arabayiSur(): string
{
return "Tofaş arabayı sürüyorum";
}
}
class Mercedes implements Car
{
public function arabayiSur(): string
{
return "Mercedes arabayı sürüyorum";
}
}
Buraya kadar tamam. Bu adımdan sonra Strategy tasarım kalıbını kullanarak bu nesneleri çalışma esnasında enjekte edecek şekilde ana kodumuzu aşağıdaki gibi yazalım:
Class CarStrategy {
private $strategy;
Public __construct(Car $strategy) {
$this->strategy = $strategy
}
Public function arabayiSur() {
return $this->strategy->arabayiSur();
}
}
Şimdi Yukarıda Stategy tasarım kalıbını kullanarak kodladığımız sınıfı, CarFactory sınıfının içerisinde Factory Tasarım kalıbını kullanarak yazalım:
Class CarFactory {
Public static function arabaAl(bool $luks):Car {
$car = new CarStrategy();
if ($luks === true) {
return $car->set_new_strategy(new Mercedes());
}
return $car->set_new_strategy(new Tofas());
}
}
Kullanımı:
$car = CarFactory::arabaAl(true);
echo $car->arabayiSur();
Bu kadar! Bu örnekle hem Strategy hem de Factory kalıbını bir arada kullanmış oldum.
Etiketler: