我看到复合模式和依赖注入意味着
public function __construct(ClassToUseInterface $class) {
$this->class = $class
}
那么,差异是什么?
答案 0 :(得分:2)
您的问题中提供的代码既不代表依赖注入,也不代表复合模式。您的代码代表所谓的Dependency inversion。让我们回答你的问题:
Dependency injection
的一种方法是从定义construct
方法的类外部的代码调用construct
函数,并将其传递给具体实现ClassToUseInterface
的对象。外部代码被称为注入依赖项,因此称为Dependency injection
。IS-A
和HAS-A
关系,class
和interface
关系它来自或实现的1}}或php
。这允许类的一组对象表现得好像它们代表该类的单个对象。 由于我不熟悉Composite pattern
语法,here是php
中draw
的一个很好的例子。在此示例中,Container
类中的Graphic
方法对一组draw
个对象进行操作。对于调用者来说,好像在单个Graphic
对象上调用了<?php
abstract class Graphic{
abstract public function draw();
}
class Triangle extends Graphic{
private $name = '';
public function __construct($name = 'unknown'){
$this->name = $name;
}
public function draw(){
echo '-I\'m a triangle '.$this->name.'.<br>';
}
}
class Container extends Graphic{
private $name = '';
private $container = array();
public function __construct($name = 'unknown'){
$this->name = $name;
}
public function draw(){
echo 'I\'m a container '.$this->name.'.<br>';
foreach($this->container as $graphic)
$graphic->draw();
}
public function add(Graphic $graphic){
$this->container[] = $graphic;
}
public function del(Graphic $graphic){
unset($this->container[$graphic]);
}
}
$tri1 = new Triangle('1');
$tri2 = new Triangle('2');
$tri3 = new Triangle('3');
$container1 = new Container('1');
$container2 = new Container('2');
$container3 = new Container('3');
$container1->add($tri1);
$container1->add($tri2);
$container2->add($tri3);
$container3->add($container1);
$container3->add($container2);
$container3->draw();
?>
函数。
如果链接的示例不起作用,这里是链接的代码(Dario Ocles; 2007年6月18日)
$container3->add($container1);
在链接/上面的示例中,语句Container
将Container
对象传递给dependency injection
的另一个对象。这将再次被称为dependency injection
。从中可以看出composite pattern
和composite
并不意味着同一件事。 dependency
对象可以作为composite
传递。 dependency injection
对象与order by
不同。
免责声明:上述计划的所有功劳都归原作者所有。