-1

为我的问题选择正确的设计模式让我有点困惑。这是我的代码:

<?php

class Report_Journal ...
class Report_Recommendation ...
class Report_Customer ...

$type = "journal"; // value can also be "recommendation or customer"

?>

现在我想为该特定类型创建正确的对象,在这种情况下意味着 Report_Journal。我在考虑工厂模式,但我不喜欢工厂的是它的依赖项不是注入而是在类中定义的。你会如何解决这个问题?提前致谢。

BR,克里斯

4

2 回答 2

1

从我的角度来看,工厂模式是正确的方法。您应该首先创建一个interface来定义所有这些类型的公共接口,并使用它来放入使用该类的所有方法的参数列表中。

function blub(myInterface $obj) 

这是依赖注入明确需要的,想象一下该blub方法用于注入所需的类。myInterface由于您从该方法继承的所有三个对象都blub适用于所有这些对象。

最后,您可以创建一个工厂方法,例如

function getInstance($objectType, $params){
    if (!class_exists($objectType)) {
        throw new Exception('Bad type');
    }
    $instance = new $objectType($params);
    return $instance;
}

要更深入地了解(基于 ​​php),您可以查看该博客文章

http://net.tutsplus.com/tutorials/php/understanding-and-applying-polymorphism-in-php/

于 2013-04-28T16:27:39.203 回答
0

您可以使用变量作为类名,PHP 允许这样做,因为它是一种解释型语言:

<?php
$class_name = "Report_" . ucfirst($type);
$object = new $class_name();
?>
于 2013-04-28T16:28:40.240 回答