【发布时间】:2011-12-11 17:42:35
【问题描述】:
我目前正在完成一个 PHP 项目,但 OO 的一般原则仍然适用。
我有一个名为 Node 的父类,它是抽象的 - 即它不能被实例化。有许多扩展 Node 的类,并且是可实例化的。其中一些包括事件、人员和项目。
我遇到的问题是我经常需要实例化一个节点而不知道它将是哪个子类。所有 Node 和节点子类总是将相同类型的对象(数据库中的一行)作为构造函数的参数。为了解决不知道我需要什么类型的实现类的问题,我创建了一个简单的静态类,它将返回正确的节点子类。该代码示例如下:
<?php
class NodeClassRegistry{
public static function init_class($node) {
switch ($node->type) {
case 'person':
return new Person($node);
case 'event':
return new Event($node);
}
}
}
?>
这对我来说似乎是非常糟糕的设计——它是一种工厂模式,但它似乎真的与全局状态相关联。是否有适合这种情况的设计模式?
【问题讨论】:
标签: oop design-patterns inheritance