该文章属于《编程中的那些经典套路——设计模式汇总》系列,而且如下内容基于语言PHPphp
面向对象五大原则中有一点很是重要的原则:单一职责原则。编程
简单工厂模式就是遵循了这一原则,它让不一样职责的类各司其职。segmentfault
简单工厂模式是面向对象多态性的一个应用,它的好处在于:设计模式
代码具备必定的拓展性函数
遵循了单一职责原则设计
属于面向接口编程code
简单工厂模式提供了一个对外的类 Client和实际工做的类,外界只须要传递特定的参数就能够调用不一样的实际功能类,而不须要直接面对实际类与函数,拓展性大大加强。对象
一言不合上代码。接口
简单工厂模式.phpget
<?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’: }判断,这无疑是十分灾难的,由于写好的代码咱们最好不要再去碰它,由于极可能形成未知的缘由,你说是不?
由此衍生出更加规范,拓展性更强,遵循了开放封闭原则的的工厂模式(没有简单):