Я всегда видел, как применяется фабричный шаблон, когда есть несколько типов, например, пользователей.Например, admin и superadmin .У вас может быть фабричный метод, например, такой:
// within a class named "User" for example
const ADMIN = 'admin';
const SUPER_ADMIN = 'superadmin';
// ...
public static function factory($type = 'admin')
{
switch ($type) {
case self::SUPER_ADMIN:
return new UserSuperAdmin();
break;
case self::ADMIN:
default:
return new UserAdmin();
break;
}
}
Оба - или ЛЮБЫЕ - в этом случае - из классов User implement
будут чем-то вроде интерфейса, который определяет те методы получения и установки, которые вы использовали, как setFirstName()
и setAge()
, например.
Вы также можете определить массив $options
или что-то, что будет передаваться каждому из их конструкторов, чтобы сразу создать для вас все эти поля.
public static function factory($type = 'admin', $options = array())
{
switch ($type) {
case self::SUPER_ADMIN:
return new UserSuperAdmin($options);
break;
case self::ADMIN:
default:
return new UserAdmin($options);
break;
}
}
Далее приведен пример одного из конструкторов:
class UserAdmin implements IUserInterface // for example
{
public function __construct($options)
{
// do something with the options array
}
}
Затем, когда вы создаете его, все так просто:
$user = User::factory('admin');