در این قسمت تیم کدگیت را با آموزش Command پترن در جاوا همراهی کنید. پیش نیاز این آموزش شامل موارد زیر است:
Behavioral Design Pattern
یکی از زیر شاخههای دیزاین پترن Behavioral Design Pattern میباشد. یکی از وظایف اصلی این دیزاین پترن، تعامل اشیا و جداسازی وظایف آنها با یکدیگر است. تعریف کامل Behavioral Design Pattern بدین صورت است که، تمامی اشیا با یکدیگر به راحتی بتوانند ارتباط برقرار کرده، بدون آنکه باعث وابستگی بین آنها شود.
Command پترن در جاوا
Command پترن نوعی پترن دیتا محور است. یک درخواست(Request) در قالب یک کلاس به عنوان دستور(Command) قرار میگیرد. درخواست به کلاس دیگری که آن را کلاس فراخوانی (invoker class) نامگذاری میکنیم، فرستاده میشود. Invoker class به دنبال شی میگردد که درخواست فرستاده شده را پاسخ دهد و آن را اجرا کند.

مثال Command پترن در جاوا
یک Interface به نام Order میسازیم که مانند Command عمل میکند(منظور اجرای درخواست هایی است که به سمتش فرستاده میشود). دو کلاس به نام SellStock و BuyStock از Order استفاده میکنند. کلاسی داریم به نام Broker که همان Invoker class ما است. کلاس Stock نیز کلاس درخواست ما بوده و درخواست ها را ساخته و به سمت Broker برای اجرا انتقال میدهیم. کد کلاسهای توضیح داده شده به صورت زیر میباشد:
public interface Order {
void execute();
}
public class SellStock implements Order {
private Stock abcStock;
public SellStock(Stock abcStock) {
this.abcStock = abcStock;
}
public void execute() {
abcStock.sell();
}
}
public class BuyStock implements Order {
private Stock abcStock;
public BuyStock(Stock abcStock) {
this.abcStock = abcStock;
}
public void execute() {
abcStock.buy();
}
}
public class Broker {
private List<Order> orderList = new ArrayList<Order>();
public void takeOrder(Order order) {
orderList.add(order);
}
public void placeOrders() {
for (Order order : orderList) {
order.execute();
}
orderList.clear();
}
}
public class Stock {
private String name = "ABC";
private int quantity = 10;
public void buy() {
System.out.println("Stock [ Name: " + name + ", Quantity: " + quantity
+ " ] bought");
}
public void sell() {
System.out.println("Stock [ Name: " + name + ", Quantity: " + quantity
+ " ] sold");
}
}
تست Command پترن در جاوا
برای تست کدهای بالا، کد Main زیر را بزنید:
public static void main(String[] args) {
Stock abcStock = new Stock();
BuyStock buyStockOrder = new BuyStock(abcStock);
SellStock sellStockOrder = new SellStock(abcStock);
Broker broker = new Broker();
broker.takeOrder(buyStockOrder);
broker.takeOrder(sellStockOrder);
broker.placeOrders();
}
در کد بالا ابتدا یک کلاس سازنده درخواست (Stock) را ساختیم در ادامه دو کلاس پذیرنده درخواست (SellStock و BuuStock) را ساختیم. کلاس Broker نیز برای دریافت درخواستها را میسازیم و درخواستها را به آن میدهیم. در آخر درخواستها را اجرا میکنیم.