Merhabalar değerli Java dostları,

Bugünkü yazımda bir başka şablon olan command design pattern anlatmak istiyorum. Öncelikle şunu belirteyim ki command design pattern, davranış sınıfına giren bir şablondur. Yani sınıflarınızın davranışı, işleyişi ile ilgili bir çözüm araıyorsanız command design pattern işinizi görebilir. İsterseniz önce örneğimize bakalım sonra da command design pattern ne için kullanılır sorusuna cevap arayalım.

package anajavatica.pattern.behavioral.command;public abstract class Car {

public abstract void startCar();

public abstract void stopCar();

}

package anajavatica.pattern.behavioral.command;public class Opel extends Car {

@Override
public void startCar() {
// do something before start the car.
System.out.println(“Opel started.”);
}

@Override
public void stopCar() {
// do something before stop the car.
System.out.println(“Opel stopped.”);
}

}

package anajavatica.pattern.behavioral.command;public class Audi extends Car {

@Override
public void startCar() {
// do something before start the car.
System.out.println(“Audi started.”);
}

@Override
public void stopCar() {
// do something before stop the car.
System.out.println(“Audi stopped.”);
}

}

package anajavatica.pattern.behavioral.command;public interface ICommand {

public void execute();

}

package anajavatica.pattern.behavioral.command;public class StartCommand implements ICommand {

private Car car = null;

public StartCommand(Car car) {
this.car = car;
}

@Override
public void execute() {
car.startCar();
}

}

package anajavatica.pattern.behavioral.command;public class StopCommand implements ICommand {

private Car car = null;

public StopCommand(Car car) {
this.car = car;
}

@Override
public void execute() {
car.stopCar();
}

}

package anajavatica.pattern.behavioral.command;public class CommandMain {

public static void main(String[] args) {

Car opel = new Opel();
Car audi = new Audi();

ICommand opelStartCommand = new StartCommand(opel);
ICommand audiStartCommand = new StartCommand(audi);
ICommand opelStopCommand = new StopCommand(opel);
ICommand audiStopCommand = new StopCommand(audi);

opelStartCommand.execute();
opelStopCommand.execute();
audiStartCommand.execute();
audiStopCommand.execute();

}

}

Öncelikle Car sınıfı aracılığı ile abstract bir sınıf oluşturuyoruz ve iki arabamız bu sınıfı kullanıyor. Daha sonra ICommand arayüzü ile yapılacak işi esnek hale getiriyoruz ve daha sonra main aracılığı ile uygulamamız çalışıyor.

Command design pattern ile ilgili en önemli nokta ICommand arayüzü ile Car sınıfı üzerinde bir işlem yapmak istediğimizi belirtiyoruz. Car sınıfı abstract olduğu için çağrılacak metodun gerçekte hangi tipte bir nesneye bağlı olduğu bizi ilgilendirmiyor. Son kullanıcı için önemli olan execute arayüz metodu ile Car nesnesi üzerinde işlem yapmak. Kısacası command design pattern ile tetikleyen sınıf ile metodu tetiklenen sınıf tamamen birbirinden ayrılıyor ve birbirilerinden haberdar değiller. ICommand arayüzünü uygulayan sınıflar yapılacak işlemi bir sınıf haline getirdiler. Böylece command design pattern ile tamamen bir soyutlama işlemi sağlanabilir.

Bol Java’ lı günler dileğiyle… 😀

No responses yet

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.