我们说我有这两个子类(伪代码):
Male.class:
include Person.class;
class Male extends Person {
...
}
Female.class:
include Person.class;
class Female extends Person {
...
}
最后我有了这个基类:
Person.class:
class Person {
static function makePersonBySettings(settings) {
var person;
if(settings.gender == 'male') {
person = new Male(settings.name);
}
else if(settings.gender == 'female') {
person = new Female(settings.name);
}
return person;
}
}
父的静态方法取决于知道Male.class和Female.class是什么。我不能在Parent.class的顶部导入子类(例如import Male.class
),因为子类依赖于知道父类。
解决此问题的最佳方法是什么?
答案 0 :(得分:2)
您可以通过创建包含工厂方法的专用类来将工厂方法(makePersonBySettings)与父类分离。
答案 1 :(得分:0)
class Person {
static function makePersonBySettings(settings) {
var person;
person = new self(settings.name);
return person;
}
}
self
将引用您的子对象。
Male::makePersonBySettings(settings)
将返回Male
个对象。