پیاده سازی متد factory در #C
دوشنبه 5 مرداد 1394در این مقاله می خواهیم به پیاده سازی Real Time توسط متد factory بپردازیم. پیاده سازی متد Factory عملکرد برنامه را به سرعت افزایش می دهد و هزینه های آن را کاهش می دهد.
هر چقدر پروژه ما وسیعتر و تعداد کلاسها و اشیاء زیاد باشند، برای بالا بردن خوانایی، کارایی و امنیت برنامه، از الگوهای از پیش تعریف شده که راه حلی برای مشکلات برنامه نویسی است استفاده می شود. الگوی 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)انتخاب شود.
- C#.net
- 1k بازدید
- 2 تشکر