本篇文章给大家带来的内容是关于PHP设计模式:php工厂模式的介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
工厂模式是一种隐藏类的实例化细节,并且对一系列类使用相同的实例化方式,可以很方便的扩展更多的实现同一个接口的类的创建对象的方式。
示例应用场景有:
1)在线支付
支付有多种方式,比如微信支付,支付宝支付,银联支付等,根据用户的选择而采用相应的支付方式;
2)访问量统计
在一个业务较复杂的项目中,用户对不同的对象进行访问,比如访问文章、访问作者、访问文章目录等,同样是访问记录,记录的信息却不一样
工厂模式的原理:
先根据多个对象的相同行为设计一个接口,再让这几个类去实现这个接口,接着制造一个实例化工厂,即可在工厂中根据不同参数实例化不同类。
工厂模式的具体实现:
/* * 形状接口 */interface Shape{ public function area();}/* * 长方形类,实现了形状接口 */class Rectangle implements Shape{ private $long; private $width; function __construct($long,$width) { $this->long = $long; $this->width = $width; } /* * 实现面积方法 */ public function area() { // TODO: Implement area() method. return $this->long * $this->width; } }/* * 正方形类,实现了形状接口 */class Square implements Shape{ private $width; function __construct($width) { $this->width = $width; } /* * 实现面积方法 */ public function area() { // TODO: Implement area() method. return pow($this->width,2); } }/* * 圆形类,实现了形状接口 */class Circle implements Shape{ private $radiu; function __construct($radiu) { $this->radiu = $radiu; } /* * 实现面积方法 */ public function area() { // TODO: Implement area() method. return pi()*pow($this->radiu,2); } }class ShapeFactory{ /* * 获取实例化的形状对象 * ...$args 表示接受不限个数的参数 */ public function getShpae(...$args) { /* * 第一个参数为形状名,后面的参数为形状的尺寸 */ switch($args[0]) { case 'Rectangle': return new Rectangle($args[1],$args[2]); break; case 'Square': return new Square($args[1]); break; case 'Circle': return new Circle($args[1]); break; } return null; } }$factory = new ShapeFactory();$shape = $factory->getShpae('Rectangle',2,3);$area[] = $shape->area();$shape = $factory->getShpae('Square',2);$area[] = $shape->area();$shape = $factory->getShpae('Circle',2);$area[] = $shape->area(); print_r($area);/* Array ( [0] => 6 [1] => 4 [2] => 12.566370614359 ) */
相关文章推荐:
Atas ialah kandungan terperinci PHP设计模式:php工厂模式的介绍(附代码). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!