اساساً کاربرد الگوی کارخانه برای شرایطی است که چندین کلاس با ریشه مشترک داریم (یعنی چندین کلاس یک کلاس فوقانی را پیادهسازی میکنند) و غالب استفاده نیز با شی سازی (نمونه سازی) از کلاس فوقانی صورت میگیرد .[۱]
در مثال پایین دو کلاس (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));