دیزاین پترن پل - Bridge

گردآوری و تالیف : مجله آموزشی راکت
تاریخ انتشار : 11 دی 1396
دسته بندی ها : برنامه نویسی , پی اچ پی

الگوی پل، یک الگوی طراحی در مهندسی نرم‌افزار است که به معنای "جداسازی یک انتزاع از اجرای آن به طوری که این دو بتوانند به صورت مستقل تغییر پذیر باشند."می‌باشد. این الگو توسط باند چهار نفره (GoF) معرفی شده است.الگوی پل از گروه‌های قالب‌دار و گروه‌های تجمعی و بعضاً ارث‌بری برای جداسازی مسئولیتها در طبقات مختلف استفاده می‌کند.

هنگامی که اطلاعات یک کلاس اغلب تغییر کند، ویژگی‌های برنامه‌نویسی شی گرا بسیار مفید خواهد بود، چرا که تغییرات در کد برنامه، می‌تواند با حداقل اطلاعات از برنامه صورت گیرد. زمانی که کلاس‌ها و کاری که آن‌ها انجام می‌دهند نسبت به یگدیگر تفاوت‌های زیادی داشته باشد، از الگوی پل استفاده می‌شود. خود کلاس به عنوان انتزاع در نظر گرفته می‌شود و کاری که انجام می‌دهد در مرحله پیاده‌سازی آن است. همچنین الگوی پل می‌تواند به عنوان دو لایه از انتزاع در نظر گرفته شود زمانی که تنها یک پیاده‌سازی ثابت امکان‌پذیر است در زبان C++ این الگو در اصطلاح Pimpl  شناخته می‌شود.

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

کلاس های دیزاین پترن پل در زیر آمده است

Abstraction کلاس انتزاعی 

  • رابط انتزاعی را تعریف می‌کند.
  • مجری پیاده‌سازی را تأمین می‌کند.

RefinedAbstraction کلاس عادی

  • رابط تعریف شده در انتزاع را ارائه می‌دهد.

Implementor رابط کاربری

  • رابط کلاس‌های پیاده‌سازی شده را تعریف می‌کند.

ConcreteImplementor کلاس عادی

  • رابط مجری پیاده‌سازی را پیاده‌سازی می‌کند.
interface DrawingAPI {
    function drawCircle($x, $y, $radius);
}

class DrawingAPI1 implements DrawingAPI {
    public function drawCircle($x, $y, $radius) {
        echo "API1.circle at $x:$y radius $radius.\n";
    }
}

class DrawingAPI2 implements DrawingAPI {
    public function drawCircle($x, $y, $radius) {
        echo "API2.circle at $x:$y radius $radius.\n";
    }
}

abstract class Shape {
    protected $drawingAPI;

    public abstract function draw();
    public abstract function resizeByPercentage($pct);

    protected function __construct(DrawingAPI $drawingAPI) {
        $this->drawingAPI = $drawingAPI;
    }
}

class CircleShape extends Shape {
    private $x;
    private $y;
    private $radius;

    public function __construct($x, $y, $radius, DrawingAPI $drawingAPI) {
        parent::__construct($drawingAPI);
        $this->x = $x;
        $this->y = $y;
        $this->radius = $radius;
    }

    public function draw() {
        $this->drawingAPI->drawCircle($this->x, $this->y, $this->radius);
    }

    public function resizeByPercentage($pct) {
        $this->radius *= $pct;
    }
}

class Tester {
    public static function main()  {
        $shapes = array(
            new CircleShape(1, 3, 7,  new DrawingAPI1()),
            new CircleShape(5, 7, 11, new DrawingAPI2()),
        );

        foreach ($shapes as $shape) {
            $shape->resizeByPercentage(2.5);
            $shape->draw();
        }
    }
}

Tester::main();

خروجی

API1.circle at 1:3 radius 17.5
API2.circle at 5:7 radius 27.5

 

مقالات پیشنهادی

دیزاین پترن زنجیره - Chain-of-responsibility pattern

در برنامه نویسی به صورت شئ گرا، دیزاین پترنی وجود دارد به نام زنجیره مسئولیت که متشکل از یک مخزن شامل اشیاء فرمان و مجموعه ای از اشیاء پردازش است. هر...

دیزاین پترن استراتژی - Strategy Pattern

استراتژی پترن درواقع نوعی از دیزاین‌ پترن‌های Behavioral است که به شما اجازه می‌دهد راهکارهایی که برنامهٔ مورد نظرتان باید اجرا کند، بسته به شرایط خاص...

دیزاین پترن سازنده - Builder

الگوی سازنده یک الگوی مهندسی نرم‌افزار به منظور ایجاد اشیا می باشد. این الگو به منظور حل وجۀ دیگری از مشکل ساخت و تنظیم اشیا در برنامه نویسی معرفی شده...

دیزاین پترن الگوی کارخانه - Factory method

در برنامه نویسی شی گرا ، الگوی روش کارخانه یک الگوی خلاقانه است که از روش کارخانه برای حل مسئله ایجاد اشیاء بدون نیاز به تعیین دقیق کلاس شئ که ایجاد م...