1. 简述面向对象简单工厂模式
首先,了解什么是简单工厂模式,简单工厂模式是一种创建型设计模式,它提供了一个统一的接口来创建对象,而不必向客户端暴露其内部的逻辑。这种模式属于工厂模式。简单工厂模式通常使用静态方法从外部创建对象。
那么面向对象简单工厂模式,顾名思义就是在面向对象编程的基础上使用简单工厂模式来实现创建对象,使得对象统一入口和输出。
2. PHP实现面向对象简单工厂模式
2.1 确定需要创建哪些类
首先需要明确需要创建哪些类,这些类包括哪些属性和方法。这些类可以称之为“产品类”,因为通过简单工厂模式创建的就是这些产品的实例。
class ApplePhone {
public function __construct() {
echo "创建苹果手机成功!";
}
}
class HuaWeiPhone {
public function __construct() {
echo "创建华为手机成功!";
}
}
class XiaoMiPhone {
public function __construct() {
echo "创建小米手机成功!";
}
}
在上面的代码中,我们创建了三个产品类:ApplePhone、HuaWeiPhone和XiaoMiPhone,它们分别输出了一条创建成功的提示信息。
2.2 创建工厂类
接下来我们需要创建工厂类,这个工厂类用来实现创建对象的逻辑,我们称之为“工厂类”。在我们的例子中,我们创建了一个PhoneFactory类,该类包含一个静态方法createPhone,根据传入的参数来创建Phone对象的实例。
class PhoneFactory {
public static function createPhone($brand) {
switch ($brand) {
case 'Apple':
return new ApplePhone();
break;
case 'HuaWei':
return new HuaWeiPhone();
break;
case 'XiaoMi':
return new XiaoMiPhone();
break;
default:
throw new Exception("暂不支持该品牌的手机!");
}
}
}
在这个工厂类中,我们使用了switch语句来根据传入的参数brand来判断需要创建哪个类的实例,然后返回创建出来的对象实例。如果传入的参数不正确,我们会抛出一个异常。
2.3 调用工厂类来创建对象
现在,我们已经有了我们的工厂类和产品类,我们可以通过工厂类来创建不同的产品类型了。我们可以创建一个测试类来测试一下我们的代码是否能够正常工作。
class Test {
public function __construct() {
PhoneFactory::createPhone('Apple');
PhoneFactory::createPhone('HuaWei');
PhoneFactory::createPhone('XiaoMi');
PhoneFactory::createPhone('Samsung');
}
}
new Test();
在这个测试类中,我们调用了PhoneFactory类的createPhone方法来创建三种不同品牌的手机,ApplePhone,HuaWeiPhone和XiaoMiPhone。另外我们还试图创建一个暂不支持的品牌:Samsung。最终,我们会得到三个创建成功的提示信息和一个异常提示。
3. 总结
通过面向对象的简单工厂模式,我们可以将创建对象的逻辑封装在工厂类中,客户端无需关心对象的创建过程和实现细节,只需要通过简单的调用接口即可获取到所需对象。这种方式可以大大降低客户端与产品类之间的耦合度,并提高代码的可维护性和可扩展性。