时间:2021-07-01 10:21:17 帮助过:35人阅读
本篇文章给大家带来的内容是关于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
)
*/相关文章推荐:
php如何获取文件一级目录(纯代码)
php如何利用经度和纬度来计算两点之间的距离(纯代码)
以上就是PHP设计模式:php工厂模式的介绍(附代码)的详细内容,更多请关注Gxl网其它相关文章!