牛逼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!原来观察者模式竟然是这样用的

牛逼plus!原来策略模式竟然是这样用的

牛逼plus!原来适配器模式竟然是这样用的

牛逼plus!原来工厂模式竟然是这样用的

牛逼plus!原来单例模式竟然是这样用的

以上是关于牛逼plus!原来工厂模式竟然是这样用的的主要内容,如果未能解决你的问题,请参考以下文章

牛逼plus!原来策略模式竟然是这样用的

牛逼plus!原来观察者模式竟然是这样用的

牛逼plus!原来单例模式竟然是这样用的

原来 23 种设计模式还可以这样解释,看完秒懂

创建型 — 工厂方法模式(Factory Method)

工厂模式—C++代码demo解释