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.
Factory pattern yapısının gerçekleşmesini sağlayan fonksiyonu aşağıdaki gibi tanımlayabiliriz.
virtual Product
factoryMethod (String type) = 0;
Ş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 ...
çok güzel anlatımlarınız var devamını getirirsiniz umarım teşekkürler
YanıtlaSilKonu belirtirseniz yardımcı olmaya çalışırım.
Sil