牛逼plus!原来工厂模式竟然是这样用的
Posted autofelix
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了牛逼plus!原来工厂模式竟然是这样用的相关的知识,希望对你有一定的参考价值。
〝 古人学问遗无力,少壮功夫老始成 〞
工厂模式是在设计模式中比较常见,打个比方,如果你的小孩需要一个海贼王的玩具,你会去找一个海贼王的玩具加工厂帮你做一个,那么如果小孩又想要七龙珠的模型,你又要去找七龙珠的玩具加工厂? 这肯定不现实,而且工厂只做固定一种业务,肯定不久就会倒闭,那么好的方法是啥呢,你去找一个工厂,然后给他们图纸,告诉他们你需要哪种玩具即可,他们会自动根据你的图纸去设计你想要的玩具,这就是工厂模式
目录
一、创建简单工厂类
- 工厂类的作用就是你只要传你需要的类进去,你就能得到他的实例化对象
- 其实工厂就是帮你实例化你所需要的类
<?php
/**
* 工厂类
*/
class factory
{
public static function create($class_name) {
return new $class_name();
}
}
class A {}
class B {}
$a = factory::create('A');
$b = factory::create('B');
var_dump($a);
var_dump($b);
- 结果如下
object(A)#1 (0) {
}
object(B)#2 (0) {
}
二、工厂模式的实际应用
<?php
/**
* Interface shape
*/
interface shape
{
public function area();
public function perimeter();
}
/**
* 矩形
* Class rectangle
*/
class rectangle implements shape
{
private $width;
private $height;
public function __construct($width, $height) {
$this->width = $width;
$this->height = $height;
}
public function area() {
return $this->width * $this->height;
}
public function perimeter() {
return 2 * ($this->width + $this->height);
}
}
/**
* 圆
* Class circle
*/
class circle implements shape
{
private $radius;
public function __construct($radius) {
$this->radius = $radius;
}
public function area() {
return M_PI * pow($this->radius, 2);
}
public function perimeter() {
return 2 * M_PI * $this->radius;
}
}
/**
* 工厂类
* Class factory
*/
class factory
{
public static function create() {
switch (func_num_args()) {
case 1:
return new circle(func_get_arg(0));
break;
case 2:
return new rectangle(func_get_arg(0), func_get_arg(1));
break;
}
}
}
$a = factory::create(4, 5);
$b = factory::create(2);
echo '矩形的周长为:' . $a->perimeter() . '<br/>';
echo '矩形的面积为:' . $a->area() . '<br/>';
echo '圆的周长为:' . $a->perimeter() . '<br/>';
echo '圆的面积为:' . $a->area() . '<br/>';
猜你喜欢:
以上是关于牛逼plus!原来工厂模式竟然是这样用的的主要内容,如果未能解决你的问题,请参考以下文章