Makale Özeti

Bu makalede temel tasarım paternlerinden birisi olan Factory Paterni anlatılmaktadır

Makale

Factory Paterni

Günlük hayatımızda kullandığımız televizyon alıcısı gibi pek çok sofistike nesneyi, bizzat kendimiz üretmek yerine, görevi bu tür nesneleri üretmek olan fabrikalardan alarak kullanırız. Çoğu zaman bu davranışımızın nedeni; söz konusu nesnenin üretilmesi noktasında kullanılan karmaşık tekniklerdir. Üstelik bazı nesnelerin üretimi legal de olmayabilir. Sözgelimi para basmak sadece darphaneler tarafından yapılabilen bir işlemdir.

Nesne yönelimli programlamada da gerek yapısı gerekse de üretiliş biçimi oldukça komplike nesnelerle çalışmak gerekir. Örneğin DataRow sınıfı türünde bir nesnenin yaratılması için, tablonun şema yapısının kesin olarak bilinmesi gerekir. Aksi takdirde söz konusu tablo üzerindeki herhangi bir kaydı temsil edecek, bir DataRow nesnesi tablonun şema yapısından haberdar olamayacaktır. Bir başka deyişle DataRow nesnesinin yaratılışı; veri tabanı programcısına bırakılamayacak derecede karmaşık bir işlemdir. Ayrıca mantık gereği tablodaki herhangi bir kaydı temsil edecek bir nesnenin yaratılması, bu işlemin tablo üzerinden başlatılmasını gerektirir. Bu nedenle DataRow sınıfına programcının erişebileceği bir başlangıç foksiyonu (constructor) eklenmemiştir. DataRow sınıfı türünde nesne örneği yaratmak isteyen bir programcı, DataTable sınıfının NewRow() fonksiyonundan elde edeceği DataRow sınıfı türündeki nesne referansını kullanmak sureti ile amacına ulaşabilir.

DataRow benzeri nesneler için sınıf tasarımı yapan programcılar, söz konusu nesneye ait başlangıç fonksiyonunu bilinçli olarak sınıfı kullanacak kişilerin algısından gizlerler. Bu noktada kullanılan teknik; çoğu zaman başlangıç fonksiyonunu private gibi bir erişim belirteci ile tanımlamaktır.

Terminolojide bu tür nesneler ürün nesne olarak anılır. Ürün nesnelerin yaratılması noktasında ise factory sınıf ismi verilen bir sınıfa ait ve terminolojide factory metot olarak bilinen, ürün sınıf türünde referans döndürmekle görevli fonksiyonlar kullanılır. Kullanılan bu tekniğin ismi ise; factory paternidir. Böylece ürün nesnelerin yaratılması ve/veya yokedilmesi ile ilgili detaylı işlemler factory paterni kullanılarak, soyutlanabilir.

İpucu : Genelde nesne yönelimli programlama tekniğini yeni öğrenen pek çok kişi, sanal başlangıç fonksiyonlarının nasıl yaratılacağını merak eder. Ancak böyle bir şeyin gerçekleştirilmesi imkansızdır. Çünkü başlangıç fonksiyonları hem sanal olamaz hem de taban sınıftan türemiş sınıfa miras olarak aktarılmaz.

[VB .NET]

Public Class Product
     Friend Sub New()
           Console.WriteLine("Ürün yaratıldı")
     End Sub
End Class

Public Class Factory
     Public Function CreateProduct() As Product
          ‘Factory metot
          Return (New Product)
     End Function
End Class

Imports FactoryLib

Module Module1
    Sub Main()
         Dim oFactory As New Factory
         Dim prd As Product
         prd = oFactory.CreateProduct()
    End Sub
End Module

[C#]
class Product
{
    internal Product()
    {
         Console.WriteLine(“Ürün yaratıldı”); 
    }
}

class Factory
{
    public Product CreateProduct()
    {
         // Factory metot
         return new Product(); 
    }
}

using System;
using FactoryLib;

namespace FactorySmp
{
    class CSample
    {
         static void Main(string[] args)
         {
              Factory oFactory = new FactorySmp();
              Product prd = oFactory.CreateProduct(); 
         }
    }
}


Aykut TAŞDELEN
MVP (Most Valuable Professional)

aykuttasdelen@yazgelistir.com