编程中的那些套路——关于简单工厂模式

该文章属于《编程中的那些经典套路——设计模式汇总》系列,而且如下内容基于语言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’: }判断,这无疑是十分灾难的,由于写好的代码咱们最好不要再去碰它,由于极可能形成未知的缘由,你说是不?

由此衍生出更加规范,拓展性更强,遵循了开放封闭原则的的工厂模式(没有简单)

该文章属于《编程中的那些经典套路——设计模式汇总》系列

相关文章
相关标签/搜索