gpt4 book ai didi

php - 工厂/抽象工厂混淆

转载 作者:IT王子 更新时间:2023-10-29 00:00:06 31 4
gpt4 key购买 nike

经过大约 10 个月的程序化 PHP 学习后,我现在正尝试着手研究基本的 OOP 原则和设计模式。这是一个爱好,我没有那么多时间去追求它,所以请原谅这个问题的水平很低。

我的网站(目前 100% 程序化)本质上是一个图书馆。访客向图书馆脚本发送 2 个数据点 - 项目 type 和项目 code

Library.php 使用item类型选择一个include,include抓取代码命中数据库,然后构建页面。

一些例子:

[type]  [code]
game RoTo
map 32
unit 216

示例链接为 library.php?type=game&code=RoTo

一切正常,但当我开始使用 OOP 时,我看到了“对象化”这个系统的明显简单的入口点和继承路径。

class LibraryObject
{
protected $_name;
protected $_description;
}

class Game extends LibraryObject
{
protected $_releaseDate;
etc.
}

我也对一些编写良好的类(class)给我的灵 active 感到兴奋。

不过,设计模式的想法让我感到困惑。这看起来像是工厂模式,但我对FAF 之间的区别感到困惑。我已经阅读了其他专门询问该问题的 SO 问题,并且我已经阅读了 OODesign 上的示例但我觉得它们是用不同的语言编写的,这很令人沮丧。

也许如果有人可以使用我自己的数据结构来解释它对我来说更有意义?

抱歉给您带来麻烦。

最佳答案

FactoryAbstract Factory 之间的区别非常简单。在后者中,工厂本身是抽象的(!),不能直接实例化,而必须被子类化。

例如,工厂:

class Document {
public function createPage() {
return new Page;
}
}

class LandscapeDocument extends Document {
public function createPage() {
return new LandscapePage;
}
}

在抽象工厂中:

abstract class Document {
abstract public function createPage();
}

class PortraitDocument extends Document {
public function createPage() {
return new PortraitPage;
}
}

class LandscapeDocument extends Document {
public function createPage() {
return new LandscapePage;
}
}

简而言之,工厂模式在工厂类本身有一个默认实现。抽象工厂要求所有子类实现它们自己版本的工厂方法。

仅此而已。

关于php - 工厂/抽象工厂混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4719822/

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