eklenebilir,silinebilir.Aksi halde programda if-else bloglarından oluşan bir karmaşa hakim olurdu.
Strategy patternin önemli özelliklerinden biri de programın çalışma esnasında(runtime) değiştirilebilir olmasıdır.Ayrıca yandaki umlden de görüldüğü gibi içerikten(context) bağımsızdır.
Lafı fazla uzatmadan parmakları çalıştırıp koda dökelim demek istediklerimizi...
Yandaki şekilde görüldüğü üzere helikopter,vapur ve bisiklet olmak üzere üç taşıtım var.Üç taşıtta bir yerden bir yere gidince hangi ulaşım yolunu kullanılır? Sorunun yanıtı bize ulaşım da kullandıkları strateji yi verecektir.Programımızda da bunu kodlayacağız.Ancak istenildiği kadar taşıt,strategy eklenebilir.Bu programın akışını değiştirmez.
Örneğin ben benzin kullanma,korna çalma gibi yeni stratejilerde ekleyebilirdim.
//*************
//Taşıt
//*************
class Taşıt
{
protected:
KullanılanYol *k;
public:
void yol()
{
k->kullanılanyol();
}
void setYol(KullanılanYol *x)
{
k=x;
}
};
//*************
//Bisiklet
//*************
class Bisiklet:public Taşıt
{
public:
Bisiklet()
{
k=new Kara();
}
};
//*************
//Helikopter
//*************
class Helikopter:public Taşıt
{
public:
Helikopter()
{
k=new Hava();
}
};
//*************
//Vapur
//*************
class Vapur:public Taşıt
{
public:
Vapur()
{
k=new Deniz();
}
};
//*************
//Kullanılan Yol
//*************
#include
using namespace std;
class KullanılanYol
{
public:
virtual void kullanılanyol()=0;
};
//*************
//Kara Yolu
//*************
class Kara:public KullanılanYol
{
public:
void kullanılanyol()
{
cout<<"Kara yolunu kullanilir...\n";
}
};
//*************
//Hava Yolu
//*************
class Hava:public KullanılanYol
{
public:
void kullanılanyol()
{
cout<<"Hava yolunu kullanilir...\n";
}
};
//*************
//Deniz Yolu
//*************
class Deniz:public KullanılanYol
{
public:
void kullanılanyol()
{
cout<<"Deniz yolunu kullanilir...\n";
}
};
//*************
//Main
//*************
int main()
{
Taşıt *taşıt=new Bisiklet();
taşıt->yol();
taşıt->setYol(new Deniz);
taşıt->yol();
cout<<"----------------------------\n";
Taşıt *taşıt2=new Helikopter();
taşıt2->setYol(new Kara);
taşıt2->yol();
taşıt2->setYol(new Deniz);
taşıt2->yol();
system("pause");
return 0;
}
Yukarıdaki kodda maninde önce bisiklet taşıtını çağırdık.Onun yapılandırıcısında yol default olarak kara seçilmiştir.İlk yol fonksiyonu çağrıldığında kara yolu der.Ancak set fonksiyonu ile ben bisikletin kullandığı yolu değiştirdim.İkinci taşıt içinde aynı şeyleri yaptım...
Program çıktımız...
Hiç yorum yok:
Yorum Gönder