برنامه نویس فان | Fun Developer یک آدم ساده که عاشق برنامه نویسی و کد زدنه :) تلاش میکنه تا به بقیه کمک کنه. توسعه دهنده هسته لاراول و فضای اوپن سورس. فاندر پرانتز و کد نیوز.
دیزاین پترن Adapter چیه؟
تا حالا با سرویس های اس ام اس کار کردید؟ میدونید که شما باید یک درخواست به API های اون سرویس بزنید و اس ام اس ارسال کنید. خب شما میاید و از یک متد به نام "handle" استفاده کنید در کل برنامه. بعد از یک سال اون متد handle منسوخ میشه و به جاش متد send جایگزین میشه. در این حالت شما باید کل اپلیکیشن خودتون ویرایش کنید. در اینجا اصل O اصول سالید زیر پا گذاشتید. برای همین کار یک Adapter شما درست میکنید و این مشکل رو برای همیشه حل میکنید.
مثالی از Adapter در دنیای واقعی
اگه از گوشی های هوشمند استفاده کرده باشید سر شارژ موبایل شما نیاز به یک تبدیل 3 به 2 داره و بعد از اون یک پریز برق که که اون رو متصل کنید. در اینجا پریز برق هیچ وقت عوض نمیشه و سری شارژ شما با استفاده از یک Adapter تبدیل میشه.
کار عملی با دیزاین پترن آداپتر
خب برای شروع کار با این دیزاین پترن ما یک سرویس اس ام اس در نظر میگیریم و میایم یک آداپتر برای ارسال اس ام اس در نظر میگیریم:
class KavenegarSMS
{
public function send()
{
// Send sms to user
}
}
class SmsAdapter
{
protected $adapter;
public function __construct()
{
$this->adapter = new KavenegarSMS;
}
public function handle()
{
$this->adapter->send();
// ...
}
}
class UserController extends Controller
{
public function sendNotify()
{
$smsAdapter = new SmsAdapter;
$smsAdapter->handle();
}
}
در اینجا شما به راحتی میتونید درایور اس ام اس خودتون عوض کنید یا حتی اگه متدی منسوخ شد، به راحتی اپلیکیشن کار کنه و مشکلی ایجاد نشه.
خیلی میتونید این کلاس بهتر کنید، من فقط یک مثال زدم اصل داستان متوجه بشید و بقیه اش میتونه با خودتون باشه.
در آخر هم یک مثال دیگه هم براتون میزارم که بهتر متوجه بشید:
class OldSystem
{
public function fetchData()
{
return "Data from Old System";
}
}
interface NewSystemInterface
{
public function getData();
}
class Adapter implements NewSystemInterface
{
protected $oldSystem;
public function __construct(OldSystem $oldSystem)
{
$this->oldSystem = $oldSystem;
}
public function getData()
{
return $this->oldSystem->fetchData();
}
}
$oldSystem = new OldSystem();
$adapter = new Adapter($oldSystem);
echo $adapter->getData();
اولین نفر باش که نظر ثبت میکنی :) یعنی یه کامنت به ما نمیرسه 😁