【发布时间】:2015-03-12 18:08:22
【问题描述】:
我对如何在不使用继承的情况下正确完成以下操作很感兴趣:
我想像这样在我的应用中拨打电话:
// I don't want to do this:
// $temp = new Sedan;
// $myCar = new Car($temp);
// $myCar->paint();
// nor this:
// $myCar = new Car(new Sedan);
// $myCar->paint();
// Instead I want this:
$myCar = new Sedan;
$myCar->paint();
paint 方法实际上是 Car 类的一部分:
class Car {
private $carToPaintOn; // <-- Instance of Sedan would be stored here
public function __construct(CarInterface $car){
$this->carToPaintOn = $car;
}
public function paint(){
// paint some car
}
}
如果不使用继承,类Sedan(或Coupe 或Convertable 等...)会是什么样子?
类代码必须使用行业标准设计模式并遵循干净和可测试代码的准则。另外请避免重复 paint 方法,将其添加到 Sedan。
编辑:事后看来,我应该将“汽车”类命名为别的东西,并给它一个名为“Paintable”的接口,以便更好地理解这一点。
【问题讨论】:
-
你的教授不希望我们回答你的作业。
-
看看我的个人资料,我不在大学。 :-p
-
但我只是想解决我与其他人(如果你必须知道的话)的讨论,哈哈!
-
不可能。您不能实例化
Sedan对象并让它返回Car对象。为了接近,您可以结合工厂模式和委托模式。但即使这样也不能满足您的所有要求,例如间接实例化和自动依赖注入。 -
孩子们,请不要在家里这样做。
标签: php inheritance design-patterns composition php-5.5