该文章属于《编程中的那些经典套路——设计模式汇总》系列,并且以下内容基于语言PHP
面向对象五大原则中有一点非常重要的原则:单一职责原则。
简单工厂模式就是遵循了这一原则,它让不同职责的类各司其职。
简单工厂模式是面向对象多态性的一个应用,它的好处在于:
代码具有一定的拓展性
遵循了单一职责原则
属于面向接口编程
简单工厂模式提供了一个对外的类 Client和实际工作的类,外界只需要传递特定的参数就可以调用不同的实际功能类,而不需要直接面对实际类与函数,拓展性大大增强。
一言不合上代码。
简单工厂模式.php
<?php
//设定银行工作接口
interface Bankwork{
public function work();
}
//存款职员
class Depositer implements Bankwork{
public function work(){
return '开始存款';
}
}
//销售职员
class Marketer implements bankwork{
public function work(){
return '开始销售';
}
}
//接待职员
class Receiver implements Bankwork{
public function work(){
return '开始接待';
}
}
//客户端调用接口类
class Client {
public function working($type){
switch ($type) {
case '存款职员':
$man = new Depositer;
break;
case '销售':
$man = new Marketer;
break;
case '接待':
$man = new Receiver;
break;
default:
echo '传输参数有误,不属于任何一个职位';
break;
}
return $man->work();
}
}
$bankstaff = new Client();
print_r($bankstaff->working('接待')); // output :开始接待
?>
简单工厂模式可以通过传递对应的参数从而调用指定的类方法,后期需要增加职位的话,可以直接新增一个类然后写一个switch ($type) {case’condition’: }即可。
重点来了,简单工厂模式的不足:
但是简单工厂模式有一个不足,虽然它遵循了单一职责原则,但它违反了另一条同样很重要的原则:开放封闭原则。
如果新增一个财务职位,那么我们还要修改 Client类,增加一个switch ($type) {case’condition’: }判断,这无疑是十分灾难的,因为写好的代码我们最好不要再去碰它,因为很可能造成未知的原因,你说是不?
由此衍生出更加规范,拓展性更强,遵循了开放封闭原则的的工厂模式(没有简单):