بخش های اصلی

آموزش الگوهای طراحی

Design Pattern - الگوی Command

الگوی Command، یک الگوی طراحیِ حولِ داده است و زیرگروه الگوی رفتاری (behavioral) محسوب میشه. یک درخواست تحت یک شیء، بعنوان یک command (فرمان) بسته بندی میشه و به شیءِ invoker پاس داده میشه. شیءِ Invoker به دنبال شیء ای مناسب می گرده که بتواند این فرمان را اجرا بکنه، و فرمان را به شیء مربوطه که آن فرمان را اجرا می کنه، پاس میده.

پیاده سازی

رابطی به نام Order که بعنوان command (فرمان)، عمل می کنه ایجاد می کنیم. یک کلاس به نام Stock که بعنوان درخواست عمل می کنه هم ایجاد می کنیم. کلاس های concreteای با نام های BuyStock و SellStock ایجاد می کنیم، که رابطِ Order را که پردازشِ اصلیِ command (فرمان) را انجام میده، پیاده سازی می کنن. کلاسی با نام Boker نیز ایجاد می کنیم که بعنوان شیءِ invoker عمل می کنه. این کلاس می تواند سفارش ها را بگیره و در مکان مناسب قرار بده.

شیء Boker از الگوی command (فرمان) برای تشخیص این که کدام شیء command (فرمان) را بر اساس نوعِ آن اجرا می کنه، استفاده می کنه. CommandPatternDemo، نسخه ی آزمایشیِ کلاس مان، از کلاس Boker برای نشان دادن الگوی طراحی استفاده خواهیم کرد.

command pattern uml diagram

مرحله ی 1

ایجاد یک رابطِ command.

Order.java

public interface Order {
   void execute();
}

مرحله ی 2

ایجاد کلاسِ درخواست.

Stock.java

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");
   }
}

مرحله ی 3

ایجاد کلاس های concreteای که رابطِ Order را پیاده سازی می کنن.

BuyStock.java

public class BuyStock implements Order {
   private Stock abcStock;

   public BuyStock(Stock abcStock){
      this.abcStock = abcStock;
   }

   public void execute() {
      abcStock.buy();
   }
}

SellStock.Java

public class SellStock implements Order {
   private Stock abcStock;

   public SellStock(Stock abcStock){
      this.abcStock = abcStock;
   }

   public void execute() {
      abcStock.sell();
   }
}

مرحله ی 4

ایجاد کلاس command invoker.

Broker.java

import java.util.ArrayList;
import java.util.List;

   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();
   }
}

مرحله ی 5

استفاده از کلاس Boker برای گرفتن و اجرا کردن فرمان ها.

CommandPatternDemo.java

public class CommandPatternDemo {
   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();
   }
}

مرحله ی 6

بررسی خروجی

Stock [ Name: ABC, Quantity: 10 ] bought
Stock [ Name: ABC, Quantity: 10 ] sold

مبحث آموزشی

آموزش الگوهای طراحی

Learn Design Patterns

سرفصل ها

پرســیدن سؤال جدید

سؤال های تخصصی خود را از ما بپرسید

تبلیغات

دنبال کردن تلگرام کانال سافت اسکیل

https://telegram.me/softskill_ir

عملیات کاربران

خبـرنــامه

Newsletters

در خبــرنـامه سافت اسکیل عضو شویــد تا جدیدترین هـای سایت را بلافاصله در ایمیل خـود دریافت کنیـد