这是实现工厂方法的最佳途径的最好办法。这是实现工厂方法
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