工厂/抽象工厂混乱

Dre*_*rew 14 php oop design-patterns factory factory-pattern

在大约10个月的程序化PHP之后,我现在试图围绕基本的OOP原则和设计模式.这是一个爱好,我没有和我追求的那么多时间,所以请原谅这个问题的相当低级别.

我的网站(目前100%程序)是一个图书馆的核心.访问者发送库脚本2数据点 - 项目type和项目code.

Library.php 使用项类型来选择包含,include包括抓取代码以访问数据库然后构建页面.

一些例子:

[type]  [code]
 game    RoTo
 map     32
 unit    216
Run Code Online (Sandbox Code Playgroud)

一个示例链接将是 library.php?type=game&code=RoTo

一切都很好,但是当我开始使用OOP时,我看到了明显的简单入口点和继承路径,用于"客观化"这个系统.

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

class Game extends LibraryObject
{
    protected $_releaseDate;
    etc.
}
Run Code Online (Sandbox Code Playgroud)

我也对一些写得很好的课程给我的灵活性感到兴奋.

不过,设计模式的想法让我感到沮丧.它看起来像一个工厂模式,但我对FAF之间的差异感到困惑.我已经阅读了其他特别提出问题的SO问题,并且我已经阅读了OODesign上的示例,但我觉得它们是用不同的语言编写的,而且相当令人沮丧.

也许如果有人能用我自己的数据结构来解释它,那对我来说会更有意义吗?

抱歉,添麻烦了.

net*_*der 34

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

每个例子,工厂:

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

class LandscapeDocument extends Document {
   public function createPage() {
       return new LandscapePage;
   }
}
Run Code Online (Sandbox Code Playgroud)

在抽象工厂:

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;
   }
}
Run Code Online (Sandbox Code Playgroud)

简而言之,Factory模式在工厂类本身中具有默认实现.抽象工厂要求所有子类实现自己的工厂方法版本.

这里的所有都是它的.

  • @Andrew:我相信抽象工厂更适合你的用例,是的. (2认同)