PHP设计模式之工厂方法设计模式实例分析
本文实例讲述了PHP设计模式之工厂方法设计模式。分享给大家供大家参考,具体如下:
一、什么是工厂方法模式
作为一种创建型设计模式,工厂方法模式就是要创建“某种东西”。对于工厂方法,要创建的“东西”是一个产品,这个产品与创建它的类之间不存在绑定。实际上,为了保持这种松耦合,客户会通过一个工厂发出请求,再由工厂创建所请求的产品。利用工厂方法模式,请求者只发出请求,而不具体创建产品。
二、什么时候使用工厂方法模式
如果实例化对象的子类可能改变,就要使用工厂方法模式。
三、一般工厂方法模式
使用一般工厂方法模式时,客户只包含工厂的引用,一个工厂生产一种产品。增加一种产品的同时需要增加一个新工厂类和一个新产品类。
produce();
return$pro;
}
}
//文本工厂
classTextFactoryextendsFactory
{
protectedfunctionproduce()
{
$textProduct=newTextProduct();
return$textProduct->getProperties();
}
}
//图像工厂
classImageFactoryextendsFactory
{
protectedfunctionproduce()
{
$imageProduct=newImageProduct();
return$imageProduct->getProperties();
}
}
//产品类接口
interfaceProduct
{
publicfunctiongetProperties();
}
//文本产品
classTextProductimplementsProduct
{
private$text;
functiongetProperties()
{
$this->text="此处为文本";
return$this->text;
}
}
//图像产品
classImageProductimplementsProduct
{
private$image;
functiongetProperties()
{
$this->image="此处为图像";
return$this->image;
}
}
//客户类
classClient
{
private$textFactory;
private$imageFactory;
publicfunction__construct()
{
$this->textFactory=newTextFactory();
echo$this->textFactory->startFactory().'
';
$this->imageFactory=newImageFactory();
echo$this->imageFactory->startFactory().'
';
}
}
$client=newClient();
/*运行结果:
此处为文本
此处为图像
*/
?>
四、参数化工厂方法模式
使用参数化工厂方法模式时,客户包含工厂和产品的引用,发出请求时需要指定产品的种类,一个工厂生产多种产品。增加一种产品时只需要增加一个新产品类即可。
produce($product);
return$pro;
}
}
//工厂实现
classConcreteFactoryextendsFactory
{
protectedfunctionproduce(Product$product)
{
return$product->getProperties();
}
}
//产品类接口
interfaceProduct
{
publicfunctiongetProperties();
}
//文本产品
classTextProductimplementsProduct
{
private$text;
publicfunctiongetProperties()
{
$this->text="此处为文本";
return$this->text;
}
}
//图像产品
classImageProductimplementsProduct
{
private$image;
publicfunctiongetProperties()
{
$this->image="此处为图像";
return$this->image;
}
}
//客户类
classClient
{
private$factory;
private$textProduct;
private$imageProduct;
publicfunction__construct()
{
$factory=newConcreteFactory();
$textProduct=newTextProduct();
$imageProduct=newImageProduct();
echo$factory->startFactory($textProduct).'
';
echo$factory->startFactory($imageProduct).'
';
}
}
$client=newClient();
/*运行结果:
此处为文本
此处为图像
*/
?>
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。