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

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

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

27 اسفند 1401

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

الگوی طراحی Adapter  یک الگوی طراحی ساختاری(Structural) است که ارتباط دو کلاس غیرمرتبط را از طریق یک کلاس واسط انجام می‌دهد. الگوی Adapter زمانی مفید است که می‌خواهیم کلاسی ایجاد کنیم که بتواند با چندین کلاس غیرمرتبط کار کند.

الگوی Adapter از موارد زیر تشکیل شده است:

  • Target: رابطی که client میخواهد از آن استفاده کند.
  • Adaptee: کلاس موجود با رابط ناسازگار که نیاز به تطبیق دارد.
  • Adapter: کلاسی که ارتباط دو کلاس Adaptee و Target را برقرار می‌کند.
  • Client: کلاسی که قصد استفاده از نمونه‌ی ITarget را دارد.
adapter

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

در روش اول کلاس Adapter از کلاس Adaptee ارثبری می‌کند و ویژگی های آن را بدست می‌آورد و میتواند متد های آن را فراخوانی کند.

در روش دوم کلاس Adapter یک نمونه از Adaptee در بدنه خود تعریف می‌کند که میتواند از آن استفاده کند.

در هر دو روش ها کلاس Adapter باید رابط Itarget را پیاده سازی کند.

 

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

// Target interface
public interface ITarget
{
    void Request();
}
// Adaptee interface
public interface IAdaptee
{
    void SpecificRequest();
}
// Adaptee implementation
public class Adaptee : IAdaptee
{
    public void SpecificRequest()
    {
       Console.WriteLine("Adaptee method called");
    }
}

پیاده سازی روش اول:

// Class adapter implementation
public class Adapter : Adaptee, ITarget
{
    public void Request()
    {
        SpecificRequest();
    }
}

پیاده سازی روش دوم:

// Object adapter implementation
public class ObjectAdapter : ITarget
{
    private IAdaptee _adaptee;
    public ObjectAdapter(IAdaptee adaptee)
    {
        _adaptee = adaptee;
    }
    public void Request()
    {
       _adaptee.SpecificRequest();
    }
}

بکارگیری از روش ها:

// Client code
public class Client
{
    public void DoWork(ITarget target)
    {
        target.Request();
    }
}
// Usage
var client = new Client();
// Class adapter usage
var adapter = new Adapter();
client.DoWork(adapter);
// Object adapter usage
var adaptee = new Adaptee();
var objectAdapter = new ObjectAdapter(adaptee);
client.DoWork(objectAdapter);

 

در این مثال، ما یک رابط ITarget داریم که Client از آن استفاده می‌کند. همچنین یک رابط IAdaptee داریم که باید با ITarget تطبیق داده شود. کلاس Adaptee پیاده سازی رابط IAdaptee است.

کلاس Adapter مثالی است که از روش اول پیاده سازی این الگو استفاده می‌کند. این کلاس از کلاس Adaptee ارثبری کرده و رابط ITarget را پیاده سازی می کند. سپس Client می‌تواند یک نمونه از Adapter را دریافت کرده و از طریق متد Request متد SpecificRequest موجود در Adaptee را فراخوانی کند.

کلاس ObjectAdapter مثالی است که از روش دوم پیاده سازی این الگو استفاده می‌کند. این کلاس، رابط ITarget را پیاده سازی می‌کند و یک شئ نمونه از نوع Adaptee در خود تعریف می‌کند. در این مثال Client با فراخوانی متد Request از طریق شئ موجود در Adapter متد SpecificRequest را فراخوانی می‌کند.

 

در نهایت می‌بینیم که بدون ایجاد هرگونه تغییر مستقیم در کد ها و فقط با ایجاد یک کلاس واسط، ارتباط میان این دو کلاس ممکن شد.

 

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

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) نیاز دارند.

ثبت دیدگاه