我在寻找哪种设计模式?

时间:2013-04-28 16:13:45

标签: php design-patterns factory-pattern

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

<?php

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

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

?>

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

BR, 克里斯

2 个答案:

答案 0 :(得分: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/

答案 1 :(得分:0)

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

<?php
$class_name = "Report_" . ucfirst($type);
$object = new $class_name();
?>