php设计模式之创建型---工厂(简单工厂)

序言

顾名思义,此篇介绍工厂模式中的简单工厂,工厂模式属于创建型模式,而工厂模式分为简单工厂,静态工厂,抽象工厂,由浅到深,上篇介绍了最基本的单例,而简单工厂也是工厂模式里最基本的。

简单工厂概述

优点:实例化对象,根据参数获取对应的对象,避免直接实例化,降低耦合。
缺点:需知所有的类型,不符合设计模式的开闭原则,当类型增加,工厂也需要修改。
复制代码

简单工厂结构

Api: 用于构建用户功能,抽象接口,只负责抽象,不负责实现。
AchieveApi: 功能对象,用于实现接口。
Factory: 用于生产(创建)功能对象。
复制代码

正文

还是以故事的形式来叙述。 昨天是端午节日,放假了,小陈要回家,回家要用到车,但是回家的方式有很多种,不知道该开车回,还是坐车,还是骑自行车回。

1、功能接口

        class Api {
            // 要回家
            public function goHome(string $message){}
        }
复制代码

2、实现功能的工具

        // 开车
        class Car implements Api {
            public function goHome(string $message) {
                echo "开车回";
            }
        }
        
        // 坐车
        class ByCar implements Api {
            public function goHome(string $message) {
                echo "坐车回";
            }
        }
        
        // 骑车
        class RideCar implements Api {
            public function goHome(string $message) {
                echo "骑车回";
            }
        }
复制代码

3、构建工厂

    class EasyFactory {
        public static function getFactory(int type) {
            // 约定方法
            switch(type) {
                case 1:
                    return new Car();
                    break;
                case 2:
                    return new ByCar();
                    break;
                case 3:
                    return RideCar();
                    break;
                default:
                    die('超了');
            }
        }
    }
复制代码

4、测试

    $xiaochen1 = EasyFactory::getFactory(1); // 开车
    $xiaochen1->goHome();
    $xiaochen2 = EasyFactory::getFactory(2); // 坐车
    $xiaochen2->goHome();
    $xiaochen2 = EasyFactory::getFactory(3); // 骑车
    $xiaochen2->goHome();
复制代码

总结

以上方法就是简单的工厂模式,在使用时直接进行调用,不需要知道创建的逻辑,想开车回,直接去开就可以,下次自己没时间,家里人也直接能开,不用管车是怎么造出来的(前提是知道有个车),一般简单工厂是用来隔离实现,让外部只能通过特定的接口或者方法来操作。

猜你喜欢

转载自blog.csdn.net/weixin_34279061/article/details/91393628