本篇文章给大家带来的内容是关于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免费学习笔记(深入)”;










