معرفی الگوی طراحی Proxy

معرفی الگوی طراحی Proxy

مدت مطالعه : 3 دقیقه

27 فروردین 1402

الگوهای طراحی راه حل های اثبات شده ای برای مشکلات طراحی نرم‌افزار هستند. آنها به بهبود کیفیت کد، ارتقای قابلیت استفاده مجدد و افزایش قابلیت نگهداری کمک می کنند. ما از آنها برای صرفه‌جویی در زمان و تولید کد های با کیفیت، توسعه‌پذیر و انعطاف‌پذیر استفاده می‌کنیم. در این مطلب قصد داریم الگوی طراحی Proxy را معرفی کنیم.

الگوی Proxy یک الگوی ساختاری(structural) است که یک جانشین یا placeholder برای یک شی دیگر فراهم می‌کند که از طریق آن می‌شود آن شئ را کنترل کرد. این الگو مکانیزمی را پیاده می‌کند که به عنوان یک واسطه بین کلاینت و یک شی هدف عمل می کند و به کلاینت اجازه می دهد تا با شی هدف به طور غیر مستقیم از طریق شی Proxy ارتباط برقرار کند. هدف اصلی این الگو  ارائه دسترسی برای کنترل یک شئ بدون بکارگیری مستقیم آن است.

الگوی پروکسی از سه جزء تشکیل شده است:

1. Proxy: این شئ جانشین شئ اصلی است که به عنوان جایگزینی برای شئ مورد نظر عمل می کند. این شئ ویژگی های مشابه شئ اصلی را دارد که با بکارگیری آن ها، دستورات به شئ اصلی منتقل می‌شود.

2. Target: این شئ، همان شئ اصلی است که پروکسی آن را تغییر می دهد. 

3. Client: این شئی است که با پروکسی، برای دسترسی به شی مورد نظر تعامل دارد.

proxy design pattern

در ادامه نمونه ای از الگوی پروکسی در سی شارپ آمده است:

public interface IImage
{
    void Display();
}
public class RealImage : IImage
{
    private string _filename;
    public RealImage(string filename)
    {
        _filename = filename;
        LoadFromDisk();
    }
    public void Display()
    {
        Console.WriteLine($"Displaying {_filename}");
    }
    private void LoadFromDisk()
    {
        Console.WriteLine($"Loading {_filename} from disk");
    }
}
public class ProxyImage : IImage
{
    private RealImage _realImage;
    private string _filename;
    public ProxyImage(string filename)
    {
        _filename = filename;
    }
    public void Display()
    {
        if (_realImage == null)
        {
            _realImage = new RealImage(_filename);
        }
        _realImage.Display();
    }
}
public class Client
{
    private IImage _image;
    public Client(IImage image)
    {
        _image = image;
    }
    public void DisplayImage()
    {
        _image.Display();
    }
}
// Usage
var proxyImage = new ProxyImage("test.jpg");
var client = new Client(proxyImage);
client.DisplayImage();

در این مثال، IImage رابطی است که پروکسی و تصویر واقعی پیاده سازی می کنند. RealImage شی هدفی است که یک تصویر را از دیسک بارگذاری کرده و آن را نمایش می دهد. ProxyImage شیء پراکسی است که به تصویر واقعی متصل می‌شود. هنگامی که متد Display بر روی شی پراکسی فراخوانی می شود، بررسی می کند که آیا تصویر واقعی هنوز ایجاد شده است یا خیر. اگر نه، تصویر واقعی را ایجاد می کند و سپس متد Display را روی آن فراخوانی می کند.

درنهایت از طریق Client می‌توانیم فرآیند های موردنظر را اجرا کنیم.

 

برای مطالعه سایر الگو های طراحی، میتوانید از لیست زیر استفاده کنید. همچنین یک مخزن کد در گیت هاب که شامل همه‌ی الگو های طراحی می‌شود، برای شما قرار گرفته است.

design patterns

ایجاد کننده (Creational):الگوی طراحی Factory 
الگوی طراحی Builder 
الگوی طراحی Singleton 
الگوی طراحی Prototype 
الگوی طراحی Abstract Factory 
ساختاری (Structural):الگوی طراحی Adapter 
الگوی طراحی Bridge 
الگوی طراحی Composite 
الگوی طراحی Decorator 
الگوی طراحی Facade 
الگوی طراحی Flyweight 
الگوی طراحی Proxy 
رفتاری (Behavioral):الگوی طراحی Chain of Responsibility 
الگوی طراحی Command 
الگوی طراحی Interpreter 
الگوی طراحی Mediator 
الگوی طراحی Memento 
الگوی طراحی Observer 
الگوی طراحی State 
الگوی طراحی Strategy 
الگوی طراحی Template Method 
الگوی طراحی Visitor 
الگوی طراحی Iterator 
  • اشتراک گذاری:
محمدرضا باباخانی
محمدرضا باباخانی

من محمدرضا باباخانی هستم، توسعه دهنده نرم افزار. در اینجا تجربیات، نظرات و پیشنهادات خودم رو درباره تکنولوژی مینویسم. امیدوارم مطالبی که می‌نویسم بدردتون بخوره.

آخرین مطالب

سرویس مش؛ ساده سازی ارتباطات میکروسرویس و افزایش رؤیت پذیری

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

اهمیت محاسبات لبه یا Edge Computing

ا توجه به سرعت تحول فناوری، یکی از مفاهیمی که توجه زیادی را به خود جلب کرده و نحوه تعامل ما با سیستم های دیجیتال را تغییر می دهد، محاسبات لبه (Edge Computing) است.

معماری رویداد محور چیست؟

معماری رویداد محور (EDA) یک الگوی طراحی نرم افزار است که در توسعه نرم افزار های مدرن به طور چشمگیری محبوب شده است. در این معماری، جریان داده ها با وقوع رویدادها تعیین می شود. بر خلاف سیستم های متمرکز سنتی که دائماً در حال بررسی وضعیت جدید هستند. معماری رویداد محور به ویژه برای سیستم هایی مفید است که به پردازش حجم زیادی از داده ها بصورت بلادرنگ(real-time) نیاز دارند.

ثبت دیدگاه