8 Nisan 2013 Pazartesi

STRATEJİ TASARIM MODELİ(STRATEGY DESIGN PATTERN)

 

Strateji model(strategy pattern),bir işlemi yapmak için birden fazla yöntem varsa kullanılır.Her bir strateji için diğer bir deyişle her bir algoritma ailesi için  kapsüllenme yapılır.Böylece programa değişebilirlik özelliği verilir.Yani istenilen yöntem rahatlıkla
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