什么是简单工厂模式?
简单工厂模式(Simple Factory Pattern)是一种对象创建型设计模式,属于工厂模式的一种。工厂模式通常是将对象的创建过程封装在一个类中,客户端程序通过访问这个工厂类来获取需要的对象。而简单工厂模式正是通过一个工厂类的静态方法来创建对象,简化了工厂模式的实现方式。简单工厂模式具有良好的封装性、灵活性和扩展性,特别适用于那些创建对象过程比较简单的情况。
用简单工厂模式实现对象统一管理的例子
下面我们来实现一个简单的例子,通过简单工厂模式来实现对象的统一管理。我们假设有三个汽车厂家,分别是“比亚迪汽车”、“奇瑞汽车”和“长城汽车”,它们生产的汽车分别为“比亚迪F3”、“奇瑞QQ”和“长城C30”,我们要求通过简单工厂模式来实现这些汽车的统一管理。
Step 1:定义汽车接口
首先我们需要定义一个汽车接口,来规定每个汽车都必须实现的方法,我们把这个接口定义在一个php文件中:
// Car.php
interface Car
{
public function getName();
}
这个接口只有一个方法,即获取汽车名称的方法。
Step 2:实现具体汽车类
接下来我们需要分别实现三个具体的汽车类,分别代表三个汽车厂家生产的车型。我们同样把这三个类定义在单独的php文件中:
// BydF3.php
class BydF3 implements Car
{
public function getName()
{
return '比亚迪F3';
}
}
// CheryQQ.php
class CheryQQ implements Car
{
public function getName()
{
return '奇瑞QQ';
}
}
// GreatWallC30.php
class GreatWallC30 implements Car
{
public function getName()
{
return '长城C30';
}
}
这三个类分别实现了Car接口,并且实现了其中的getName方法,返回了当前汽车的名称。
Step 3:实现简单工厂类
接下来我们需要实现一个简单工厂类,来根据传入的参数来创建对应的汽车对象。我们同样把这个类定义在单独的php文件中:
// CarFactory.php
class CarFactory
{
public static function createCar($type)
{
switch ($type) {
case 'BydF3':
return new BydF3();
break;
case 'CheryQQ':
return new CheryQQ();
break;
case 'GreatWallC30':
return new GreatWallC30();
break;
default:
throw new Exception("暂时不支持这种汽车类型");
break;
}
}
}
这个类中有一个静态方法createCar,这个方法接收一个参数$type,根据此参数的值来决定创建哪种汽车对象。如果$type为‘BydF3’,则创建BydF3的实例,如果$type为‘CheryQQ’,则创建CheryQQ的实例,以此类推。如果传入的$type不属于这三种汽车类型,则抛出异常。
Step 4:客户端使用
现在我们已经定义好了接口、实现了具体汽车类,并且实现了简单工厂类,接下来我们来演示这些类的使用方法。我们新建一个php文件,命名为client.php:
// client.php
require_once 'Car.php';
require_once 'BydF3.php';
require_once 'CheryQQ.php';
require_once 'GreatWallC30.php';
require_once 'CarFactory.php';
// 通过工厂类创建比亚迪F3汽车
$bydF3 = CarFactory::createCar('BydF3');
echo $bydF3->getName() . "<br>";
// 通过工厂类创建奇瑞QQ汽车
$cheryQQ = CarFactory::createCar('CheryQQ');
echo $cheryQQ->getName() . "<br>";
// 通过工厂类创建长城C30汽车
$greatWallC30 = CarFactory::createCar('GreatWallC30');
echo $greatWallC30->getName() . "<br>";
我们在这个文件中导入了之前定义的接口、具体汽车类和简单工厂类。然后通过CarFactory类来创建不同汽车类型的对象,并获取其名称。
Step 5:运行结果
我们通过php cli来运行client.php文件,可以看到如下的结果:
比亚迪F3
奇瑞QQ
长城C30
这说明我们成功地通过简单工厂模式来实现了对三个不同厂家汽车对象的统一管理。
总结
简单工厂模式就是通过一个工厂类的静态方法来创建不同的对象,使得创建对象的过程与客户端分离,达到了对象的统一管理。在实际开发中,我们可以根据具体需求来选择是否采用简单工厂模式,通常适用于简单的场景。在这个例子中,我们通过简单工厂模式来实现不同汽车厂家生产的不同车型的统一管理,这对于我们进行汽车销售、维护等业务操作非常有帮助。