• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

浅谈PHP中的简单工厂模式

php 搞代码 4年前 (2022-01-20) 18次浏览 已收录 0个评论

本篇文章带大家了解一下PHP设计模式中的简单工厂模式。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

先从简单工厂入门,不管是面试还是被他人面试,在问到设计模式的时候,大多数人都会提到工厂模式。毫无疑问,工厂相关的几种模式在设计模式中是最出名的也是应用比较广泛的一种模式。在GoF设计模式中也都是属于创建型的模式。

但是,能够说明白简单工厂工厂模式抽象工厂模式本#文来源gaodai$ma#com搞$$代**码网$三种模式的人还真能让面试官刮目相看。这里有个前提,是你真的能说明白,大部分人,包括在深入研究设计模式之前,我也没办法说清楚。不管是我去面试,还是面试其别人。当我面试别人的时候,能讲个大概也就差不多了。而我去面试的时候,也就是类似的讲个大概。经历不少挫折之后才有了想深入的研究研究设计模式的想法,于是便会产生这一系列的文章。从这篇简单工厂开始,我们一起再次深入的对设计模式进行学习。

当然,这里用的是PHP。

解释

简单工厂,也称静态工厂,不属于GoF23种设计模式。但是可以说是所有的设计模式中大家可能最容易理解,也可能在你的代码中早就已经用过不知道多少次的一种设计模式了。我们先从一个最最简单的代码段来看。

// Factory
class Factory
{
    public static function createProduct(string $type) : Product
    {
        $product = null;
        switch ($type) {
            case 'A':
                $product = new ProductA();
                break;
            case 'B':
                $product = new ProductB();
                break;
        }
        return $product;
    }
}

没错,核心点就是中间那段简单的switch代码,我们在返回值类型中固定为Product接口的实现。

在这段代码中,使用了PHP新特性,参数类型返回值类型

产品接口和产品实现

// Products
interface Product
{
    public function show();
}

class ProductA implements Product
{
    public function show()
    {
        echo 'Show ProductA';
    }
}

class ProductB implements Product
{
    public function show()
    {
        echo 'Show ProductB';
    }
}

最后客户端的使用就很简单了

// Client
$productA = Factory::createProduct('A');
$productB = Factory::createProduct('B');
$productA->show();
$productB->show();

从以上代码可以看出,其实这里就是一个工厂类根据我们传入的字符串或者其他你自己定义的标识符,来返回对应的产品(Product对象)。

形象化一点的比喻:我是一个卖手机的批发商(客户Client,业务方),我需要一批手机(产品Product),于是我去让富士康(工厂Factory)来帮我生产。我下了订单($type变量)指明型号,然后富士康就给我对应型号的手机,然后我就继续我的工作了,和富士康的合作还真是挺愉快的。

这里比较规范的写法可能是所有产品都会去实现一个统一的接口,然后客户端只知道接口的方法统一调用即可。不规范的话也可以不使用接口,返回各种不同的对象,类似于外观(Facade)模式进行统一的门面管理。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:浅谈PHP中的简单工厂模式

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址