对不起,我无法想出一个更具描述性的标题。我的问题如下。假设您有两个类A和B,并且您知道有时可能会发生一些代码尝试实例化类型A的对象,而实际需要的是类型B的对象。重点是代码到决定哪一个是正确的对象自然属于A类而不是客户代码。
在javascript中(好吧,js没有类,但是说得清楚)你可以简单地做一下
function A() {
if(some_condition) {
return new B();
}
//else we proceed to customize and return our object
}
我想在PHP中做类似的事情。我能想到的最好的事情是
class A {
private function __construct() {
//whatever you need to do
}
public static function getInstance() {
if(some_condition) {
return new B();
}
else {
return new A();
}
}
}
问题是客户端代码总是必须知道A是特殊的,你必须使用静态方法实例化对象。
有没有办法委托给A选择要以无缝方式返回的对象类型?
答案 0 :(得分:0)
不幸的是,不,我认为你能做的最好是:
class Decider {
public static function decide() {
if(some_condition) {
return "A";
}
else {
return "B";
}
}
}
$new_class = Decider::decide();
$new_object = $new_class();
然而,这与你走近它的方式真的没什么不同。我不会认为这是一个无效的设计模式,但是我会把它留给外部类来做决定而不是让类“A”或类“B”做出决定。理想情况下,您的类应该以不需要其他类的方式封装,除非它们是类本身的成员变量或者为了功能目的而传递给类。