الگوی متد کارخانه شیء

الگوی کارخانهٔ شئ یکی از الگوهای طراحی برنامه‌نویسی شئ‌گرا برای پیاده‌سازی مفهوم کارخانه‌ها است. مانند سایر الگوهای سازندگی، کارخانهٔ شئ با مشکل ایجاد اشیاء (محصولات) بدون مشخص‌کردن کلاس اشیاء خاصی‌است که قرار است ساخته شوند. اساس الگوی متد کارخانه «تعریف یک رابط برای ایجاد اشیاء که اجازه می‌دهد اشیایی که آن رابط را پیاده‌سازی می‌کنند در رابطه با اینکه کدام کلاس باید ایجاد شود تصمیم بگیرند. متد الگوی کارخانه اجازه می‌دهد که یک کلاس تصمیم در رابطه با ایجاد اشیاء را به زیرکلاس‌ها واگذار نماید.» است.

متد کارخانه در زبان مدل‌سازی یکپارچه (UML)

اساساً کاربرد الگوی کارخانه برای شرایطی است که چندین کلاس با ریشه مشترک داریم (یعنی چندین کلاس یک کلاس فوقانی را پیاده‌سازی می‌کنند) و غالب استفاده نیز با شی سازی (نمونه سازی) از کلاس فوقانی صورت میگیرد .[1]

PHP

در مثال پایین دو کلاس (MySqlTable - OracleTable) برای ارتباط با پایگاه داده ایجاد کردیم که از اینترفیس DbTable استفاده میکنند. اما زمانی که قرار است از این دو کلاس استفاده کنیم وظیفه TableFactory است که کلاس مورد نظر را بر اساس تنظیماتی که در Factory قرار داده ایم آماده نماید. ممکن است در کلاس Factory بخواهیم از متدهای دیگری نیز استفاده نماییم که در تمام کلاس‌ها از نوع DbTable قابل استفاده باشد. مانند تنظیمات پایگاه داده و ارسال آن به کلاس مربوطه در هنگام ایجاد کلاس و ... .

interface DbTable
{
    public function create($array);
}

class MySqlTable implements DbTable
{
    public function create($array)
    {
        // add a record to table 1 on mysql database
    }
}

class OracleTable implements DbTable
{
    public function create($array)
    {
        // add a record to table 2 on oracle database
    }
}

class TableFactory
{
    private $dbTypeConfig = 'mysql';

    public function createTable()
    {
        if ($this->dbTypeConfig == 'mysql') {
            return new MySqlTable();
        } elseif ($this->dbTypeConfig == 'oracle') {
            return new OracleTable();
        }
        return null;
    }
}

$factory = new TableFactory();
$table = $factory->createTable();
$table->create(array(1));

پیوند به بیرون

منابع

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.