OOP工厂方法与构造函数

时间:2013-02-26 13:49:51

标签: php factory-pattern

我有一个顶级课程,让我们说学校。

还有几门课程扩展了学校课程。

通常情况下,如果我必须调用其中一个子类,我会使用:

new Math('aaa')new English(array('foo'));

每个子类都有不同的参数。

现在,更好的是:

1)在School类中创建工厂方法,所以:

School::Factory('aaa')会根据给定参数返回Math('aaa')类到Factory()方法

2)或者直接简单地调用每个子课程?

编辑:我只有两个子课程,我的问题是我不知道在生产代码中这样做是否值得一点简单。我只是检查哪些参数传递给Factory方法,并根据这些信息我调用这两个类中的一个。你觉得怎么样?

一方面,我将能够编写更简单的代码。 另一方面,每当我需要添加新的子类时(尽管很少有机会这样做),我也需要更改Factory()方法,所以我在这里有依赖。

1 个答案:

答案 0 :(得分:0)

  

1)在School类中创建工厂方法,所以:

你说你有2个课程延伸到学校。因此,学校不应该充当工厂。父类不应该知道它的子/子类。

  

2)或者直接简单地调用每个子课程?

或者你可以拥有一个带有createMath( aaa )的“CourseFactory”或“LectureFactory”。或者视情况而定,可能是createLecture("math")

但是,在您的示例中,数学或英语扩展学校是没有意义的(除非您的意思是MathSchool和EnglishSchool,但我将其理解为MathCourse和EnglishCourse)