دیزاین پترن Command

دیزاین پترن Command

Behavioral DESIGN PATTERNS

یکی از زیرشاخه های الگوهای طراحی، Behavioral Design Patterns است. تمرکز و وظیفه اصلی این دیزاین پترن ها تعامل اشیاء و جداسازی وظایف آن ها  از یکدیگر است.

Command Design Pattern

دیزاین پترن Command یکی از زیرشاخه های الگوهای طراحی از نوع Behavioral است.

الگوی طراحی فرمان یک درخواست را به عنوان یک شیء در بر می گیرد و بدین ترتیب به شما امکان می دهد با درخواست های مختلف ، درخواست صف یا ورود به سیستم ، پارامترها را تنظیم کرده و عملیات غیرقابل انجام را پشتیبانی کنید.

سختش نکنیم! وقتی یک سری دستورات داریم که میخوایم یکدفعه با هم انجام بشه همه رو میدیم به یک متدی که اونها رو اجرا کنه.

میزان استفاده : متوسط رو به بالا

پیاده سازی دیزاین پترن Command

فرض کنید کلاسی به نام Stock داریم که میتوانیم آن را بخریم یا بفروشیم. این کلاس را به شکل زیر مینویسیم.

internal class Stock
    {
        public int Cnt { get; set; }
        public string Name { get; set; }

        public void Sell()
        {
            Console.WriteLine("Selling Order");
        }
        public void Buy()
        {
            Console.WriteLine("Buying Order");
        }
    }

یک اینترفیس هم داریم به نام IOrder که وقتی میخواهیم عملیاتی را انجام دهیم از متدی که در این اینترفیس وجود دارد استفاده میکنیم.

public interface IOrder
    {
        void Execute();
    }

حالا دو کلاس ایجاد میکنیم که از این IOrder ارث برده اند و جهت خرید و فروش Stock آنهارا مینویسیم.

internal class OrderSell : IOrder
    {
        private Stock stock;
        public OrderSell(Stock stock)
        {
            this.stock = stock;
        }
        public void Execute()
        {
            stock.Sell();
        }
    }
 internal class OrderBuy : IOrder
    {
        private Stock stock;
        public OrderBuy(Stock stock)
        {
            this.stock = stock;
        }
        public void Execute()
        {
            stock.Buy();
        }
    }

عملیات اصلی خرید و فروش در متد Execute پیاده سازی کردیم. چرا که برای ما که به عنوان یک فرمانده در این کدها هستیم تفاوتی بین کار ها وجود ندارد و فقط دستور اجرای دستورات را صادر میکنیم. این دستور در اینجا میتواند خرید یا فروش باشد.

حالا نوبت به این میرسد که ما یک لیستی از دستورات را در محلی دریافت کنیم تا یکی یکی آن ها را انجام دهیم. این لیست را در کلاسی به نام OrderBroker مینویسیم.

 internal class OrderBroker
    {
        private List ordersList;
        public OrderBroker()
        {
            ordersList = new List();
        }

        public void AddOrder(IOrder order)
        {
            ordersList.Add(order);
        }

        public void PlaceOrders()
        {
            foreach (var item in ordersList)
            {
                item.Execute();
            }
            ordersList.Clear();
        }
    }

دیگر برای ما فرقی ندارد دستور چیست. ما لیستی از دستورات را از طریق متد AddOrder یکی یکی دریافت میکنیم و در لیستمان ذخیره میکنیم.

در نهایت هم با دستور PlaceOrder تک تک دستورات را اجرا میکنیم و در نهایت لیست دستورات را خالی میکنیم.

حال متد main را به این شکل مینویسیم.

 static void Main(string[] args)
        {
            try
            {
                OrderBroker broker = new OrderBroker();
                OrderBuy buy = new OrderBuy(new Stock() { Cnt = 10, Name = "Egg" });
                OrderSell sell = new OrderSell(new Stock() { Cnt = 5, Name = "Egg" });
                broker.AddOrder(buy);
                broker.AddOrder(sell);
                broker.PlaceOrders();
            }
            catch (Exception ex)
            {
                ShowError(ex.Message);
            }
            Console.ReadLine();
        }

ما در کد بالا به وسیله OrderBroker دو دستور خرید ۱۰ تخم مرغ و فروش. ۵ تخم مرغ را صادر کردیم و با PlaceOrder کردن همگی را با هم انجام دادیم.

برای آموزش رایگان در مورد انواع دیزاین پترن ها و معماری های نرم افزار می توانید به این آموزش مراجعه نمایید:

معماری نرم افزار مهم ترین پترن های معماری نرم افزار

دیزاین پترن یا الگوی طراحی چیست؟

دیزاین پترن  در حقیقت راه حل مسائل طراحی نرم افزار هستند که بارها و بارها در دنیای توسعه نرم افزار تکرار میشوند. الگوهایی از طراحی قابل استفاده مجدد (reusable) و تعامل اشیاء.

پرینت صفحه

هولوسن

با من یاد بگیر

آموزش های بیشتر در وبسایت هولوسن : https://holosen.net

۴ نظر
  • صادق ورمرزیار
    ارسال در : ۰۷:۲۶h, ۱۵ تیر پاسخ
    (3/5)

    مرسی از وقتی که گذاشتین ولی تو تعریف اصلی این دیزاین پترن تو رفرنس های معتبر چیز دیگری توضیح داده شده .

    • هولوسن
      ارسال در : ۰۷:۵۴h, ۱۹ تیر پاسخ

      صادق ورمرزیار عزیز سلام و عرض ادب
      امیدوارم عالی باشید.

      منظور شما از “چیز دیگر” دقیقا چیست؟ توضیح بفرمایید لطفا. رفرنس‌هایی که به آن اشاره داشته‌اید را ذکر بفرمایید تا باهم بررسی کنیم. تمام اطلاعات متن بالا از رفرنس‌های معتبر گردآوری شده است.
      با تقدیم احترام، پشتیبانی هولوسن

  • سید
    ارسال در : ۰۴:۳۲h, ۰۳ اسفند پاسخ
    (5/5)

    دمت گرم ، عالی

    • هولوسن
      ارسال در : ۱۶:۱۶h, ۰۳ اسفند پاسخ

      سید عزیز سلام و عرض ادب

      امیدوار هستیم که عالی و سرشار از حس مثبت باشید
      خوشحال هستیم که رضایت خاطر شما فراهم شده است.

      با تقدیم احترام،‍ پشتیبانی هولوسن

**پرسش و پاسخ** سوال خود مطرح کنید.
امتیاز شما*