PHP设计模式之工厂方法设计模式实例分析
程序员文章站
2022-05-23 21:39:39
本文实例讲述了php设计模式之工厂方法设计模式。分享给大家供大家参考,具体如下:
一、什么是工厂方法模式
作为一种创建型设计模式,工厂方法模式就是要创建“某种东西”。对...
本文实例讲述了php设计模式之工厂方法设计模式。分享给大家供大家参考,具体如下:
一、什么是工厂方法模式
作为一种创建型设计模式,工厂方法模式就是要创建“某种东西”。对于工厂方法,要创建的“东西”是一个产品,这个产品与创建它的类之间不存在绑定。实际上,为了保持这种松耦合,客户会通过一个工厂发出请求,再由工厂创建所请求的产品。利用工厂方法模式,请求者只发出请求,而不具体创建产品。
二、什么时候使用工厂方法模式
如果实例化对象的子类可能改变,就要使用工厂方法模式。
三、一般工厂方法模式
使用一般工厂方法模式时,客户只包含工厂的引用,一个工厂生产一种产品。增加一种产品的同时需要增加一个新工厂类和一个新产品类。
<?php /** * 一般工厂方法设计模式 **/ //工厂抽象类 abstract class factory { protected abstract function produce(); public function startfactory() { $pro = $this->produce(); return $pro; } } //文本工厂 class textfactory extends factory { protected function produce() { $textproduct = new textproduct(); return $textproduct->getproperties(); } } //图像工厂 class imagefactory extends factory { protected function produce() { $imageproduct = new imageproduct(); return $imageproduct->getproperties(); } } //产品类接口 interface product { public function getproperties(); } //文本产品 class textproduct implements product { private $text; function getproperties() { $this->text = "此处为文本"; return $this->text; } } //图像产品 class imageproduct implements product { private $image; function getproperties() { $this->image = "此处为图像"; return $this->image; } } //客户类 class client { private $textfactory; private $imagefactory; public function __construct() { $this->textfactory = new textfactory(); echo $this->textfactory->startfactory() . '<br />'; $this->imagefactory = new imagefactory(); echo $this->imagefactory->startfactory() . '<br />'; } } $client = new client(); /*运行结果: 此处为文本 此处为图像 */ ?>
四、参数化工厂方法模式
使用参数化工厂方法模式时,客户包含工厂和产品的引用,发出请求时需要指定产品的种类,一个工厂生产多种产品。增加一种产品时只需要增加一个新产品类即可。
<?php /** * 参数化工厂方法设计模式 **/ //工厂抽象类 abstract class factory { protected abstract function produce(product $product); public function startfactory(product $product) { $pro = $this->produce($product); return $pro; } } //工厂实现 class concretefactory extends factory { protected function produce(product $product) { return $product->getproperties(); } } //产品类接口 interface product { public function getproperties(); } //文本产品 class textproduct implements product { private $text; public function getproperties() { $this->text = "此处为文本"; return $this->text; } } //图像产品 class imageproduct implements product { private $image; public function getproperties() { $this->image = "此处为图像"; return $this->image; } } //客户类 class client { private $factory; private $textproduct; private $imageproduct; public function __construct() { $factory = new concretefactory(); $textproduct = new textproduct(); $imageproduct = new imageproduct(); echo $factory->startfactory($textproduct) . '<br />'; echo $factory->startfactory($imageproduct) . '<br />'; } } $client = new client(); /*运行结果: 此处为文本 此处为图像 */ ?>
更多关于php相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《php数组(array)操作技巧大全》、《php基本语法入门教程》、《php运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家php程序设计有所帮助。