آموزش دیزاین پترن Adapter در پی اچ پی (PHP)

دیزاین پترن 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();

امیدوارم خوشتون اومده باشه💜

0 🔥
1 🎉
1 😮
1 👍
1 💜
1 👏
میلاد خسروی
نویسنده کد نیوز

برنامه نویس فان | Fun Developer یک آدم ساده که عاشق برنامه نویسی و کد زدنه :) تلاش میکنه تا به بقیه کمک کنه. توسعه دهنده هسته لاراول و فضای اوپن سورس. فاندر پرانتز و کد نیوز.

0+ نظر

برای ثبت نظر ابتدا ورود کنید.

0 نظر

    اولین نفر باش که نظر ثبت میکنی :) یعنی یه کامنت به ما نمیرسه 😁