工厂方法模式

本文介绍了工厂方法模式的基本概念及其在创建对象过程中的应用。通过PHP示例代码展示了如何使用工厂方法模式来创建不同类型的汽车对象,并对比了简单工厂模式存在的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设计模式入门系列

在之前的项目中,如果需要创建某一类型的类的实例,我通常会专门写一个用来创建该类的类。以下面的例子为例,为了创建BMW和Benz的实例,我通常会建一个类似于CarFactory的类,通过传入一个参数在该类的接口(比如说getInstance)中返回想要创建的类。
这种创建类的方式叫做简单工厂模式。

这么做的一个问题是在getInstance中需要加入很多的判断,每增加一种新的类型就需要在switch case的代码中增加一种类型,这在面向对象编程中是不被推荐的;另外一种情况就是如果一个参数不够用了,需要增加一些新的参数来判断,这就会导致创建该类的接口变得越来越复杂。

在我理解的工厂方法模式中,工厂相当于是对要创建的类的层次结构的抽象。工厂类必须要与其创建的类具有相同的层次结构,每一个类的创建都可以通过一个在工厂类层次结构中与其相同位置的工厂来创建。这样既保留了对原来类结构的描述,又实现了最大程度上的解耦。

<?php

interface car
{
    public function drive();
}

class BMW implements car
{
    public function drive()
    {
        echo "This is BMW";
    }
}

class Benz implements car
{
    public function drive()
    {
        echo "This is Benz";
    }
}

interface Factory
{
    public function createCar();
}

class BMWFactory implements Factory
{
    public function createCar()
    {
        return new BMW();
    }
}

class BenzFactory
{
    public function createCar()
    {
        return new Benz();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值