PHP工厂模式Factory Pattern的实现及特点

 更新时间:2023年03月25日 11:37:54   作者:php_gl12345678  
工厂模式,是一种实例化对象的方式,只要输入需要实例化对象的名字,就可以通过工厂对象的相应工厂函数来制造你需要的对象,工厂模式的最主要作用就是对象创建的封装、简化创建对象操作

工厂模式(Factory Pattern)是什么

工厂模式是一种创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会向客户端暴露创建逻辑,而是使用一个共同的接口来指向新创建的对象。

工厂模式的优点

  • 工厂模式可以帮助我们实现松耦合,它将客户端代码与实际创建对象的代码分离开来;
  • 工厂模式可以帮助我们封装变化,客户端代码无需知道实际创建的对象,只需知道工厂即可;
  • 工厂模式可以帮助我们实现单一职责原则,一个类只负责一个职责,由工厂类负责创建对象。

工厂模式的实现

在 PHP 中,我们可以使用以下方式来实现工厂模式:

1. 简单工厂模式

简单工厂模式是一种将创建逻辑封装在一个类中的工厂模式。在简单工厂模式中,我们使用一个工厂类来创建所有的对象,根据传入的参数不同来返回不同的对象实例。

<?php
// 定义接口
interface Car
{
    public function run();
}
// 实现接口
class Benz implements Car
{
    public function run()
    {
        echo 'Benz is running...';
    }
}
// 实现接口
class Bmw implements Car
{
    public function run()
    {
        echo 'Bmw is running...';
    }
}
// 工厂类
class CarFactory
{
    public static function createCar($type)
    {
        switch ($type) {
            case 'Benz':
                return new Benz();
            case 'Bmw':
                return new Bmw();
            default:
                throw new Exception('Undefined car type.');
        }
    }
}
// 使用
$car1 = CarFactory::createCar('Benz');
$car1->run(); // output: Benz is running...
$car2 = CarFactory::createCar('Bmw');
$car2->run(); // output: Bmw is running...

2. 工厂方法模式

工厂方法模式是一种将对象的创建委托给具体的工厂类来完成的工厂模式。在工厂方法模式中,我们定义一个创建对象的接口,由子类来决定实例化哪个类。

<?php
// 定义接口
interface Car
{
    public function run();
}
// 实现接口
class Benz implements Car
{
    public function run()
    {
        echo 'Benz is running...';
    }
}
// 实现接口
class Bmw implements Car
{
    public function run()
    {
        echo 'Bmw is running...';
    }
}
// 定义工厂接口
interface CarFactory
{
    public function createCar();
}
// 实现工厂接口
class BenzFactory implements CarFactory
{
    public function createCar()
    {
        return new Benz();
    }
}
// 实现工厂接口
class BmwFactory implements CarFactory
{
    public function createCar()
    {
        return new Bmw();
    }
}
// 使用
$benzFactory = new BenzFactory();
$car1 = $benzFactory->createCar();
$car1->run(); // output: Benz is running...
$bmwFactory = new BmwFactory();
$car2 = $bmwFactory->createCar();
$car2->run(); // output: Bmw is running...

3. 抽象工厂模式

抽象工厂模式是一种将多个对象的创建委托给具体的工厂类来完成的工厂模式。在抽象工厂模式中,我们定义一个抽象工厂接口,由具体的工厂类来实现该接口,创建多个相关的对象。

<?php
// 定义接口
interface Car
{
    public function run();
}
// 实现接口
class Benz implements Car
{
    public function run()
    {
        echo 'Benz is running...';
    }
}
// 实现接口
class Bmw implements Car
{
    public function run()
    {
        echo 'Bmw is running...';
    }
}
// 定义抽象工厂接口
interface CarFactory
{
    public function createBenz();
    public function createBmw();
}
// 实现抽象工厂接口
class Factory implements CarFactory
{
    public function createBenz()
    {
        return new Benz();
    }
    public function createBmw()
    {
        return new Bmw();
    }
}
// 使用
$factory = new Factory();
$car1 = $factory->createBenz();
$car1->run(); // output: Benz is running...
$car2 = $factory->createBmw();
$car2->run(); // output: Bmw is running...

总结

工厂模式是一种非常常见的创建型模式,它可以帮助我们封装变化,实现松耦合,同时遵循单一职责原则。在实际开发中,我们可以根据具体的需求,选择不同的工厂模式来实现对象的创建。

到此这篇关于PHP工厂模式Factory Pattern的实现及特点的文章就介绍到这了,更多相关PHP工厂模式Factory Pattern内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • PHP的命令行扩展Readline相关函数的使用

    PHP的命令行扩展Readline相关函数的使用

    PHP 作为一个 Web 开发语言,相对来说,命令行程序并不是它的主战场。所以很多年轻的 PHP 开发者可能连命令行脚本都没有写过,更别提交互式的命令操作了。而今天,我们带来的这个扩展就是针对 PHP 的交互式命令行操作的
    2021-05-05
  • php绘图之生成饼状图的方法

    php绘图之生成饼状图的方法

    这篇文章主要介绍了php绘图之生成饼状图的方法,涉及GD库中imagefilledarc方法的使用技巧,需要的朋友可以参考下
    2015-01-01
  • PHP 快速排序算法详解

    PHP 快速排序算法详解

    其实快速排序之所以称之快速,就是因为,冒泡排序是每次对比只交换相邻的两个值的位置,这样每个值要移动到它最终的排序结果中所对应的位置,可能需要很多次位置的变化。但是快速排序可在一次划分中,就确定你选定的那个对比值在最终排序好的队列中的位置。
    2014-11-11
  • PHP里面把16进制的图片数据显示在html的img标签上(实现方法)

    PHP里面把16进制的图片数据显示在html的img标签上(实现方法)

    下面小编就为大家带来一篇PHP里面把16进制的图片数据显示在html的img标签上(实现方法)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • php生成带logo二维码方法小结

    php生成带logo二维码方法小结

    本文给大家对比介绍了常用的2种生成带logo二维码的实现方法,非常的实用,有需要的小伙伴可以根据自己的需求来选择
    2016-04-04
  • php中实现字符串翻转的方法

    php中实现字符串翻转的方法

    本文主要介绍了实现php字符串翻转的方法,具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • Ubuntu 16.04下安装PHP 7过程详解

    Ubuntu 16.04下安装PHP 7过程详解

    这篇文章主要给大家介绍了在Ubuntu 16.04系统下安装PHP 7的全过程,文中介绍的非常详细,对大家的学习或者工作具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03
  • 详解PHP实现定时任务的五种方法

    详解PHP实现定时任务的五种方法

    这几天需要用PHP写一个定时抓取网页的服务器应用。 在网上搜了一下解决办法, 找到几种解决办法,现总结如下。
    2016-07-07
  • PHP中使用Memache作为进程锁的操作类分享

    PHP中使用Memache作为进程锁的操作类分享

    这篇文章主要介绍了PHP中使用Memache作为进程锁的操作类分享,本文直接给出类实现代码以及应用示例,需要的朋友可以参考下
    2015-03-03
  • 详解PHP框架EasySwoole

    详解PHP框架EasySwoole

    EasySwoole是一款常驻内存型的分布式swoole框架,专为API而生,支持同时混合监听HTTP、WebSocket、自定义TCP、UDP协议,且拥有丰富的组件,例如协程 连接池、TP风格的协程ORM、协程微信SDK等诸多组件。让开发者编写出多进程,可异步,高可用的应用服务。
    2021-05-05

最新评论