3

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

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

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


大菌说事
4.9k 声望683 粉丝