Strategy pattern nesne yapılı
yani object oriented programlama dillerinin en temel pattern örneklerinden biri
olarak ön plana çıkmaktadır.
Problem
Programımızda
değişken birçok özelliğin bir arada kullanılması sonucunda inheritance ve
polimorphizm yapısı gereği ortaya karışık bir program çıkmaktadır. Ve programımız
ilişkiler bakımından zayıflamaktadır.
Amaç
Oluşan bu
karmaşıklığı ve programımızın yapısının bozulmasını önlemek amaçlı birtakım
değişiklikler yapmamız gerekmektedir.
Çözüm
Strategy pattern genel olarak
programımızdaki sabit olan özlellikler ile sabit olmayanları ayrı bir şekilde
toplanması olarak tanımlanabilir ve bunu yaparken iki grubun kodları
birbirinden bağımsız bir şekilde yazılabilir.
Bu pattern yarattığımız nesneye
istenilen davranışı atama şansı verir ve o programın herhangi bir anında o
davranış fonksiyonunu istediğimiz şekilde değiştirebiliriz .
Örnek olarak bulunduğuz yerden
herhangi bir yere gitmek istiyorsunuz. Bunun için personel araç , taxi , otobüs
vb gibi birçok seçenek vardır. Yani bu
gidiş seçenekleri bizim programımız için gidiş seçenekleri olarak ortaya
çıkmaktadır. Diğer kısım ise sabit olan kısım değişiklik olmayan kısımdır. Burada
değişken kısımdaki nesneler atanır ve programın çalışma anında ( run time ) değişiklikler yapılabilir.
Şekil üzerinde aşağıdaki gibi
gösterebiliriz:
Örnek kod
#include<iostream>
#include<string>
using namespace std ;
class vehicle {
public :
virtual void transport () =0;
};
class personal_car:public vehicle{
public :
void transport()
{
cout<<"transport by personal car... "<<endl ;
}
};
class taxi:public vehicle{
public :
void transport()
{
cout<<"transport by taxi... "<<endl ;
}
};
class city_bus:public vehicle{
public :
void transport()
{
cout<<"transport by city bus ... "<<endl ;
}
};
class Trransport {
private :
vehicle *v;
public :
Trransport(vehicle * x )
{
v=x ;
}
void display()
{
v->transport(); // hangi
araç atanmış ise onun transport fon. çağrılır.
}
void set_vehicle(vehicle * x )
{
v=x ;
}
};
int main () {
Trransport * pt = new Trransport(new taxi());
pt->display();
pt->set_vehicle(new personal_car());
pt->display();
pt->set_vehicle(new city_bus());
pt->display();
system("PAUSE");
return 0 ;
}
Output
Sonuç
Bu şekilde bir tasarım bize oluşacak karmaşıklığı yok
etmemizi ve programın yapısını korumamızı sağlar. Üstelik herhangi bir eklenti
veya çıkarma durumunda hiçbir sorun ile karşılaşmayız.
Zaman ayırdığınız için teşekkürle
Lütfen yorum yapınız ...
Hiç yorum yok:
Yorum Gönder