這是實現工廠方法的最佳途徑的最好辦法。這是實現工廠方法
1)包含該模型的所有成員工廠方法來定義
class UserFactory {
/**
* @return UserModel
*/
function create($firstName, $lastName, $age) {
$user = new UserModel();
$user->setFirstName($firstName);
$user->setLastName($firstName);
$user->setAge($age);
return $user;
}
}
// Usage example
$user = $userFactory->createUser('Yanik', 'Lupien', 99);
$userRepo->persist($user);
2)簡單地創建模型並返回它的工廠方法。我們可以通過使用模型設置器來填充模型。
class UserFactory {
/**
* @return UserModel
*/
function create() {
$user = new UserModel();
return $user;
}
}
// Usage example
$user = $userFactory->create();
$user->setFirstName('Yanik');
$user->setLastName('Lupien');
$user->setAge(99);
$userRepo->persist($user);
3)上設置了一個param
class MyUserFactory {
const ADMIN = 'admin';
const SUPER_ADMIN = 'superadmin';
public function create($type = self::ADMIN)
{
switch ($type) {
case self::SUPER_ADMIN:
return new UserSuperAdmin($options);
break;
case self::ADMIN:
default:
return new UserAdmin($options);
break;
}
}
// Usage
$user = $myUserFactory->create(MyUserFactory::SUPER_ADMIN);
if ($user instanceof UserSuperAdmin) {
$user->setSuperAdminProperties();
}
if ($user instanceof UserAdmin) {
$user->setAdminProperties();
}
第二種方式具有更少的代碼,並且是更好的。爲什麼要創建多種方式來設置名字? – 2011-12-28 22:46:30
根據@ mmmshuddup的回答,我不認爲這實際上是工廠模式。 – McKay 2011-12-28 22:59:00
http://en.wikipedia。org/wiki/Factory_method_pattern – McKay 2011-12-28 22:59:23