الگوهای طراحی راه حل های اثبات شده ای برای مشکلات طراحی نرمافزار هستند. آنها به بهبود کیفیت کد، ارتقای قابلیت استفاده مجدد و افزایش قابلیت نگهداری کمک می کنند. ما از آنها برای صرفهجویی در زمان و تولید کد های با کیفیت، توسعهپذیر و انعطافپذیر استفاده میکنیم. در این مطلب قصد داریم الگوی طراحی Adapter را معرفی کنیم.
الگوی طراحی Adapter یک الگوی طراحی ساختاری(Structural) است که ارتباط دو کلاس غیرمرتبط را از طریق یک کلاس واسط انجام میدهد. الگوی Adapter زمانی مفید است که میخواهیم کلاسی ایجاد کنیم که بتواند با چندین کلاس غیرمرتبط کار کند.
الگوی 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 را فراخوانی میکند.
در نهایت میبینیم که بدون ایجاد هرگونه تغییر مستقیم در کد ها و فقط با ایجاد یک کلاس واسط، ارتباط میان این دو کلاس ممکن شد.
برای مطالعه سایر الگو های طراحی، میتوانید از لیست زیر استفاده کنید. همچنین یک مخزن کد در گیت هاب که شامل همهی الگو های طراحی میشود، برای شما قرار گرفته است.
من محمدرضا باباخانی هستم، توسعه دهنده نرم افزار. در اینجا تجربیات، نظرات و پیشنهادات خودم رو درباره تکنولوژی مینویسم. امیدوارم مطالبی که مینویسم بدردتون بخوره.
ثبت دیدگاه