1.简单工厂模式
1.1 介绍
简单工厂模式属于创建型设计模式,由一个工厂对象的静态方法决定创建出哪一个具体实例。
1.2 优缺点
1.2.1 优点
工厂类负责处理根据不同条件创建具体实例,实例消费类不再需要通过复杂的逻辑创建实例,只需要给工厂类必要的判断条件。明确了各个类的职责,将实例和实例消费类完全解耦。
1.2.2 缺点
所有实例的创建逻辑全部集中在工厂类中,违反了高内聚责任分配原则。当实例不断增多,工厂类会越来越复杂,而且当新增实例类时,工厂类也得相应修改。
1.3 适用场景
简单工厂模式适用于实例类相对较少,或者实例类几乎不会新增减少的情况。
1.4 代码示例
在开发OA系统时,我们添加一个新员工时,会确定他的部门级别,公司发展部门可能会增加很多,而员工级别相对变化较少,我们以员工级别作为实例类来写例子。
php代码
//职级抽象类
abstract class Grade {
protected $personInfo = array();
public function setPersonInfo($name){
$this->personInfo['name'] = $name;
}
//不同部门可能有不同处理,抽象此方法
abstract public function setDepartment($department);
public function save(){
//todo
}
}
//员工实例
class Staff extend Grade{
public function setDepartment($department){
$this->personInfo['department'] = $department;
//todo staff
}
}
//经理实例
class Manager extend Grade{
public function setDepartment($department){
$this->personInfo['department'] = $department;
//todo staff
}
}
//工厂类
class GradeFactory{
public static function create($grade){
switch($graade){
case 'staff':
$re = new Staff();
break;
case 'manager':
$re = new Manager();
break;
default:
$re = new Staff();
}
}
}