7 Nisan 2013 Pazar

STRATEGY PATTERN ( STRATEJİ TASARIM MODELİ )

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 J
Lütfen yorum yapınız ...




Hiç yorum yok:

Yorum Gönder