17 Nisan 2013 Çarşamba

FABRİKA METODU ( FACTORY METHOD )



Factory method türkçedeki anlamıyla fabrika metodu birden çok nesne üretiminin söz konusu olduğu ve üretilecek nesnenin program akışında (runtime ) belli olduğu programlama yapısına factory method denir. Factory pattern yapısı nesnelerin yaratılması ile ilgilenen metottur.



 Factory pattern yapısının gerçekleşmesini sağlayan fonksiyonu aşağıdaki gibi tanımlayabiliriz.


virtual Product factoryMethod (String type) = 0;

          
           Bu fonksiyon girilen string input değerine göre nesne üretir ve nesne döndürür. Fabrika metodu dediğimizde budur zaten.

            Şimdi bu anlattıklarım ile ilgili basit bir uygulama yazalım isterseniz.



Programımız basit yapılı bir para ile çalışan vede karşılığında yiyecek veren bir makinenin çalışma prensibini kapsıyor. Siz bir yiyecek isterseniz tuşa basıp alıyorsunuz bu aslında bizim programımızdaki string yerine kullanılmaktadır ve geriye kalan tüm yapı factory yapısının uygulanmasıdır.











Program



#include<iostream>

#include<string>

using namespace std ;

class Product{

public:
       virtual void execute ()=0;
       virtual void description() =0;

};

class Cola:public Product{

public:
       void execute()
       {
             cout<<"Coke sold 1 unit... "<<endl<<endl;
       }

       void description()
       {
             cout<<"Cola: Acidic beverages..."<<endl <<endl;
       }
};

class Water:public Product{
      
public:
       void execute()
       {
             cout<<"Water sold 1 unit... "<<endl<<endl;
       }

       void description()
       {
             cout<<"Water: Necessary for your health..."<<endl <<endl;
       }

};

class Biscuit : public Product{

public:
       void execute()
       {
             cout<<"Biscuit sold 1 unit... "<<endl<<endl;
       }

       void description()
       {
             cout<<"Biscuit: Basic food..."<<endl<<endl ;
       }

};

class Noproduct:public Product{


public:

       void execute()
       {
             cout<<"No Product !!! "<<endl<<endl;
       }

       void description()
       {
             cout<<"No Product !!!"<<endl<<endl ;
       }

};


class Factory_method {

protected :
       virtual Product * Create_Product(string )=0;

public :
       virtual void execute_Product(string )=0;
       virtual void description_Product(string )=0;


};


class Concreate_factory : public Factory_method {

protected :
       virtual Product *Create_Product(string p)
       {
             Product *product ;

             if(p=="water")
                    product= new Water() ;
             if (p=="cola")
                    product=new Cola();
             if (p== "biscuit")
                    product=new Biscuit() ;
             if(p!="cola" && p!="biscuit" && p!="water")
             {
                    cout<<"Wrong string !!!"<<endl ;
                    product= new Noproduct() ;
             }
             return product ;
       }

       void execute_Product(string p)
       {
             Product *product ;
             product = Create_Product(p);
             product->execute();
       }

       void description_Product(string p)
       {
             Product *product ;
             product = Create_Product(p);
             product->description();
       }
      


};

int main () {


       Factory_method * fac = new Concreate_factory();

       fac->description_Product("water");
       fac->description_Product("cola");
       fac->description_Product("biscuit");
       fac->execute_Product("water");
       fac->execute_Product("biscuit");
       fac->execute_Product("coffe");

       system ("pause ") ;
       return 0 ;
}


output



Gördüğümüz gibi istediğimiz tipten nasıl üretildiği ile ilgilenmeden nesne üretebildik.


Zaman ayırdığınız için teşekkürler J
Lütfen yorum yapınız ...




2 yorum:

  1. çok güzel anlatımlarınız var devamını getirirsiniz umarım teşekkürler

    YanıtlaSil
    Yanıtlar
    1. Konu belirtirseniz yardımcı olmaya çalışırım.

      Sil