Factory Tasarım Kalıbı Nedir?



2 dakikalık okuma
July 22, 2019

Factory tasarım kalıbı kısaca istediğimiz özellikteki nesneyi oluşturup bize döndüren bir kalıptır. “Creational” tasarım kalıbı kategorisine girer. Bu kategori(Creational) bir yada daha fazla nesnenin oluşturulması ve yönetilmesi ile ilgilidir.

Şimdi örnekle daha iyi açıklamaya çalışacağım.

Bir Interface oluşturalım:

 <?php

 interface Car
 {
     public function arabayiSur(): string;
 }

Şimdi arabaları oluşturalım:

 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";
     }
 }

Şimdi Factory tasarım kalıbı ile istediğimiz özellikteki nesneyi bize sağlattıralım. Şöyle:

 Class CarFactory {

     Public static function arabaAl(bool $luks):Car {

         if ($luks === true) {

             return new Mercedes();
         }

         return new Tofas();

     }

 }

Kullanımı:

 $car = CarFactory::getCar(true);
 echo $car->drive();

Hepsi bu kadar! İstediğimiz özellikteki nesneyi oluşturup $car değişkenine atıyoruz ve o nesneyi artık kullanıyoruz. Burada dikkatinizi çekmiştir ki nesne oluşturma işi Factory içerisinde yapılıyor.

Factory tasarım kalıbı, Strategy tasarım kalıbına çok benziyor; ama aradaki fark biri diğer sınıflara ait nesneleri factory içerisinde oluşturup kullanıma hazır hale getirirken, Strategy kalıbında buna ihtiyaç duyulmuyor.

“CarFactory” sınıfına tekrar dikkatle bakın. Şarta göre “Mercedes” ya da “Tofas” CarFactory içinde oluşturulup hazır hale getiriliyor ve ben kullanırken $car = CarFactory::getCar(true); tarzında istenen şart sağlandığında nesneler zaten factory içerisinde oluşturulup kullanıma hazır hale getirileceğinden bana echo $car->drive(); şeklinde oluşturulmuş nesneyi kullanmak düşüyor.

Bu yüzden Factory tasarım kalıbı “Creational” kategorisinde yer alırken, “Strategy” tasarım kalıbı da “Behavioral” tasarım kalıpları kategorisinde zikredilir.


Etiketler: