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

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو
متد کارخانه در زبان مدل‌سازی یکپارچه (UML)

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

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

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));

پیوند به بیرون[ویرایش]

منابع[ویرایش]