首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >工厂/抽象工厂混淆

工厂/抽象工厂混淆
EN

Stack Overflow用户
提问于 2011-01-18 01:58:28
回答 2查看 8.1K关注 0票数 14

在经历了10个月的过程PHP之后,我现在正试图把我的注意力集中在基本的OOP原则和设计模式上。这是一种爱好,我几乎没有我想要追求的那么多时间,所以请原谅这个问题的低层次。

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

Library.php使用项目类型来选择一个包含,并且include抓取代码来访问数据库,然后构建页面。

下面是一些例子:

代码语言:javascript
复制
[type]  [code]
 game    RoTo
 map     32
 unit    216

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

一切都很好地运作,但是当我开始使用OOP时,我看到了明显的简单入口点和继承路径来“客观化”这个系统。

代码语言:javascript
复制
class LibraryObject
{
    protected $_name;
    protected $_description;
}

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

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

不过,设计模式的想法让我很不爽。这似乎是一种工厂模式,但我对FAF之间的差异感到困惑。我读过其他问题,所以我专门问这个问题,我在OODesign上读过例子,但我觉得它们是用不同的语言写的,这是相当令人沮丧的。

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

抱歉打扰你了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-18 02:32:24

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

例如,工厂:

代码语言:javascript
复制
class Document {
   public function createPage() {
       return new Page;
   }
}

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

摘要工厂:

代码语言:javascript
复制
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;
   }
}

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

非那样做不行。

票数 35
EN

Stack Overflow用户

发布于 2015-01-20 11:31:27

以下是另一种可以查看它的方法:

清理灌木丛:

工厂模式就是创造模式。也就是说,它用于创建用于使用的实例。

工厂模式

  • 一种创建模式,其中创建实例的逻辑掌握在Factory类的手中。
  • 工厂模式只创建一种类型的对象实例。在您的示例中,它将创建类型为 LibraryObject 的对象,假设LibraryObject是层次结构树中最顶层的对象。

抽象模式(工厂工厂)

  • 一种创建模式,其中创建实例的逻辑掌握在实现Factory接口/抽象类的类手中。
  • 抽象工厂模式可以创建不同类型的对象,因此可以使用Factory接口/抽象类的具体实现来创建所需类型的对象。这就是为什么它被称为工厂的原因。

下面的链接将是一个很好的参考,我建议您也阅读Factory方法模式:

http://www.oodesign.com/creational-patterns/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4719822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档