简单工厂模式,严格来说不属于设计模式,更像一种编码风格。
通过在工厂类中进行判断,一般通过if-elseif 或者 switch,然后创建需要的功能类。
上代码:
<?php
interface People {
public function work();
}
class Teacher implements People{
public function work() {
echo 'Teach students knowledge. ';
}
}
class Programmer implements People{
public function work() {
echo 'Write the codes. ';
}
}
class Factory{
public function create($name) {
switch (strtolower($name)) {
case 'teacher':
return new Teacher();
case 'programmer':
return new Programmer();
default:
break;
}
}
}
$factory = new Factory();
$factory->create('Teacher')->work();
$factory->create('Programmer')->work();
也有人把简单工厂叫做静态工厂方法模式,用以下方法实现:
class TeacherFactory{
public static function create() {
return new Teacher();
}
}
class ProgrammerFactory{
public static function create() {
return new Programmer();
}
}
//client
$teacher = new TeacherFactory();
$teacher::create()->work();
$programmer = new ProgrammerFactory();
$programmer::create()->work();
优点:简单工厂代劳去创建功能类的实例,不必赤裸裸的在客户端去new了
缺点:高耦合,每次新增一个功能类就要去改工厂类方法