什么是简单工厂模式?
简单工厂模式是面向对象设计模式的一种,它负责根据条件动态创建不同的对象,而不需要在使用时显式地引用一个具体类。
简单工厂模式包含三个角色:工厂角色、抽象产品角色和具体产品角色。其中,工厂角色负责创建抽象产品角色的实例,在具体产品角色中实现一些具体的操作。
PHP面向对象简单工厂模式实现对象动态创建
在PHP中,可以通过简单工厂模式实现对象的动态创建。下面,我们来看一个具体的例子:
1.定义抽象产品类
我们首先需要定义一个抽象的产品类,这个类是其他具体产品类的父类,定义了一些具体产品类的通用属性和方法。
abstract class Product{
/***具体产品类的公共属性***/
protected $name;
protected $price;
protected $desc;
/***具体产品类的公共方法***/
public function getInfo(){
return "名称:".$this->name."
"."价格:".$this->price."
"."描述:".$this->desc."
";
}
/***抽象方法,由具体产品类实现***/
abstract public function buy();
}
在上面的代码中,我们定义了一个抽象类Product,这个抽象类中有一些公共属性和方法,这些属性和方法将被其他具体的产品类所共享。同时,这个抽象类中也定义了一个抽象方法buy(),这个方法将由具体的产品类自行实现。
2.定义具体产品类
我们需要定义一些具体的产品类,这些类继承自上面定义的抽象类Product,实现了父类中定义的抽象方法buy()并实现了具体的业务逻辑。
/***
* 具体产品类:手机
* 实现了Product中定义的抽象方法buy()
***/
class Phone extends Product{
public function __construct(){
$this->name="手机";
$this->price="2999元";
$this->desc="XX品牌新款手机";
}
public function buy(){
return "已购买手机,待发货!";
}
}
/***
* 具体产品类:电视
* 实现了Product中定义的抽象方法buy()
***/
class TV extends Product{
public function __construct(){
$this->name="电视";
$this->price="4999元";
$this->desc="XX品牌4K电视";
}
public function buy(){
return "已购买电视,待发货!";
}
}
在上面的代码中,我们定义了两个具体的产品类:手机和电视。这两个类都继承自抽象类Product,并实现了其中的抽象方法buy()。同时,在这两个类的构造方法中,我们定义了具体的产品属性,如名称、价格和描述等。
3.定义工厂类
我们需要定义一个工厂类,这个类负责根据客户端的需求动态创建具体的产品类,并返回一个抽象的产品类对象。
class Factory{
/***工厂方法,根据客户端的需求返回相应的具体产品类对象***/
public static function createProduct($type){
switch($type){
case "phone":
return new Phone();
break;
case "tv":
return new TV();
break;
default:
throw new Exception("没有找到相应的产品类!");
}
}
}
在上面的代码中,我们定义了一个工厂类Factory,其中包含了一个工厂方法createProduct(),这个方法根据客户端的需求动态创建具体的产品类对象并返回一个抽象的产品类对象。
4.客户端代码
最后,我们需要编写客户端代码,按照下列步骤实现对象的动态创建:
通过工厂类的工厂方法createProduct()创建具体产品类的对象。
调用创建的具体产品类对象的公共方法。
try{
//创建手机类对象
$phone=Factory::createProduct("phone");
echo $phone->getInfo(); //输出手机的一些基本信息
echo $phone->buy(); //执行特定的业务逻辑
//创建电视类对象
$tv=Factory::createProduct("tv");
echo $tv->getInfo(); //输出电视的一些基本信息
echo $tv->buy(); //执行特定的业务逻辑
}
catch(Exception $e){
echo $e->getMessage();
}
在上面的客户端代码中,我们首先通过工厂类的工厂方法createProduct()动态地创建了具体产品类的对象,然后调用了这个对象的公共方法getInfo()输出了一些基本信息,并执行了特定的业务逻辑方法buy()。
总结
通过PHP面向对象简单工厂模式可以实现对象的动态创建,使得创建对象的过程在客户端调用时动态地完成,无需显式地引用具体的产品类。简单工厂模式的核心在于工厂类,它负责根据条件动态创建具体的产品对象。而抽象产品类则是具体产品类的父类,定义了一些公共的属性和方法。通过这种方式,我们可以有效地减少代码冗余,提高代码的复用率。