ファクトリメソッドを実装する最良の方法はどれですか。ファクトリメソッドを実装する最良の方法はどれですか
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)複数の種類のがあるとき、私は常に適用される工場のパターンを見てきた方法です
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();
}
第2の方法はコードが少なく、より優れています。ファーストネームを設定する複数の方法を作成する理由 –
@ mmmshuddupの答えによると、私はこれが実際に工場のパターンだとは思わない。 – McKay
http://en.wikipedia。org/wiki/Factory_method_pattern – McKay