经过大约10个月的程序化PHP之后,我现在试图围绕基本的OOP原则和设计模式。这是一个爱好,我没有多少时间可以追求它,所以请原谅这个问题相当低的水平。
我的网站(目前100%程序)是图书馆的核心。访问者发送图书馆脚本2个数据点 - 项目type
和项目code
。
Library.php
使用项类型来选择包含,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.
}
我也对一些写得很好的课程给我的灵活性感到兴奋。
但是,设计模式的想法让我感到沮丧。它似乎是一种工厂模式,但我对 F 和 AF 之间的差异感到困惑。我已经阅读了其他特别提出问题的SO问题,并且我已经阅读了OODesign上的示例,但我觉得它们是用不同的语言编写的,而且相当令人沮丧。也许如果有人能用我自己的数据结构解释它,那对我来说会更有意义吗?
不好意思。
答案 0 :(得分:32)
工厂和抽象工厂之间的区别非常简单。在后者中,工厂本身是抽象的(!),不能直接实例化,但必须是子类。
每个例子,工厂:
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;
}
}
简而言之,Factory模式在工厂类本身中有一个默认实现。抽象工厂要求所有子类实现自己的工厂方法版本。
这就是它的全部内容。
答案 1 :(得分:1)
您可以通过以下方式查看它:
清除灌木丛:
工厂模式是一种创造模式。也就是说,它用于创建使用的实例。
工厂模式
抽象模式(工厂工厂)
下面这个链接是一个很好的参考,我建议你也阅读工厂方法模式:
http://www.oodesign.com/creational-patterns/