gpt4 book ai didi

php - 什么是 PHP 中的工厂设计模式?

转载 作者:IT老高 更新时间:2023-10-28 11:55:48 25 4
gpt4 key购买 nike

这让我很困惑,用最简单的术语来说,它的作用是什么?假装你正在向你的母亲或其他人解释。

最佳答案

工厂创建一个对象。所以,如果你想构建

 class A{
public $classb;
public $classc;
public function __construct($classb, $classc)
{
$this->classb = $classb;
$this->classc = $classc;
}
}

您不希望每次创建对象时都必须执行以下代码

$obj = new ClassA(new ClassB, new Class C);

这就是工厂的用武之地。我们定义了一个工厂来为我们处理这个问题:

class Factory{
public function build()
{
$classc = $this->buildC();
$classb = $this->buildB();
return $this->buildA($classb, $classc);

}

public function buildA($classb, $classc)
{
return new ClassA($classb, $classc);
}

public function buildB()
{
return new ClassB;
}

public function buildC()
{
return new ClassC;
}
}

现在我们要做的就是

$factory = new Factory;
$obj = $factory->build();

真正的优势是当你想改变类(class)时。假设我们想传入一个不同的 ClassC:

class Factory_New extends Factory{
public function buildC(){
return new ClassD;
}
}

或新的 B 类:

class Factory_New2 extends Factory{
public function buildB(){
return new ClassE;
}
}

现在我们可以使用继承来轻松地修改类的创建方式,以放入一组不同的类。

一个很好的例子可能是这个用户类:

class User{
public $data;
public function __construct($data)
{
$this->data = $data;
}
}

在这个类中,$data 是我们用来存储数据的类。现在对于这个类,假设我们使用 Session 来存储我们的数据。工厂看起来像这样:

class Factory{
public function build()
{
$data = $this->buildData();
return $this->buildUser($data);
}

public function buildData()
{
return SessionObject();
}

public function buildUser($data)
{
return User($data);
}
}

现在,假设我们想将所有数据存储在数据库中,更改它真的很简单:

class Factory_New extends Factory{
public function buildData()
{
return DatabaseObject();
}
}

工厂是我们用来控制如何将对象组合在一起的设计模式,使用正确的工厂模式可以让我们创建我们需要的自定义对象。

关于php - 什么是 PHP 中的工厂设计模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2083424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com