پیاده سازی متد factory در #C

دوشنبه 5 مرداد 1394

در این مقاله می خواهیم به پیاده سازی Real Time توسط متد factory بپردازیم. پیاده سازی متد Factory عملکرد برنامه را به سرعت افزایش می دهد و هزینه های آن را کاهش می دهد.

پیاده سازی متد factory  در #C

هر چقدر  پروژه ما وسیعتر و تعداد کلاسها و اشیاء زیاد باشند، برای بالا بردن خوانایی، کارایی و امنیت برنامه، از الگوهای از پیش تعریف شده که راه حلی برای مشکلات برنامه نویسی است استفاده می شود. الگوی Factory، بدون اینکه شی و کلاس واقعی را به نمایش دربیاورد، با اشیا و کلاس ها سرو کار دارد.به این مفهوم که در این الگو، دسترسی مستقیم به کلاس و اشیا توسط کاربر وجود ندارد و برای اینکار از اینترفیس(Interface) و کلاس واسط استفاده می شود.

مثال:

ما بسته های اوراکل زیادی داریم که هرکدام داری پروسیجرهای زیادی می باشند. در اینجا بعضی از پارامتر ها شبیه بسته های اوراکل و پروسیجر ها هستند.

در این شکل مشخص است که هربسته اوراکل دارای پروسیجرهای زیاد، و هر پروسیجر دارای موجودیت های زیادی می باشد.

در اینجا هر پارامتر دارای پارامترهای داخلی و خارجی خودش است. اما بعضی پارامتر ها برای همه پروسیجرها یکسان هستند. الان پارامترهای مشترک را خارج کرده و با موجودیت ها کلاس پایه را ایجاد کنید.

ما میتوانیم سناریوی فوق را به روش زیر، اجرا کنیم.

using System;  
    /* 
    * In Factory pattern, we create object without exposing the creation logic.  
    * In this pattern, an interface is used for creating an object, 
    * but let subclass decide which class to instantiate. 
    * */  
namespace FactoryMethod  
{  
Product (abstract)  
    /* 
    * Faza Class ITree 
    * 
    * */  
    public interface ITree  
    {  
        string GetTreeName();  
    }  
Products (concrete)  
    /* 
    * The Concrete class which implements ITree 
    *  
    * */  
  
    public class BananaTree : ITree  
    {  
        public string GetTreeName()  
        {  
            return "My Name Is Banana Tree";  
        }  
    }  
  
    /* 
    * The Concrete class which implements ITree 
    *  
    * */  
    public class CoconutTree : ITree  
    {  
        public string GetTreeName()  
        {  
            return "My Name Is Coconut Tree";  
        }  
    }  
Factory (abstract)  
    /* 
    * Faza Class TreeType  
    * If you want you can add abstract class instad of faza class 
    * 
    * */  
    public interface TreeType  
    {  
        ITree GetTree(string tree);  
    }  
Factory (concrete)  
    /* 
    * Concrete class which implements faza or concrete class 
    * 
    * */  
    public class ConcreteTreeType : TreeType  
    {  
  
        public ITree GetTree(string tree)  
        {  
  
            if (tree == "COCONUT")  
                return new CoconutTree();  
            else  
                return new BananaTree();  
  
        }  
    }  
Client code  
    /* 
    * main app. 
    *  
    *  */  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            TreeType oTreeType = new ConcreteTreeType();  
  
            ITree banana = oTreeType.GetTree("COCONUT");  
            Console.WriteLine(banana.GetTreeName());  
  
            Console.ReadKey();  
        }  
    }} 

در این الگو، از یک اینترفیس، برای ساخت اشیا استفاده می شود اما، اجازه می دهد زیر کلاس (subclass) تصمیم بگیرد کدام کلاس برای ساخت آبجکت (object)انتخاب شود.

آموزش سی شارپ

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان
  • C#.net
  • 1k بازدید
  • 2 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید