Design patterns
Keten van verantwoordelijkheid
Zoeken…
Chain of Responsibility-voorbeeld (Php)
Een methode die in één object wordt genoemd, schuift omhoog in de keten van objecten totdat er een wordt gevonden die het gesprek goed kan afhandelen. Dit specifieke voorbeeld gebruikt wetenschappelijke experimenten met functies die zojuist de titel van het experiment, de experimenten-ID of het weefsel dat in het experiment wordt gebruikt, kunnen krijgen.
abstract class AbstractExperiment {
abstract function getExperiment();
abstract function getTitle();
}
class Experiment extends AbstractExperiment {
private $experiment;
private $tissue;
function __construct($experiment_in) {
$this->experiment = $experiment_in;
$this->tissue = NULL;
}
function getExperiment() {
return $this->experiment;
}
//this is the end of the chain - returns title or says there is none
function getTissue() {
if (NULL != $this->tissue) {
return $this->tissue;
} else {
return 'there is no tissue applied';
}
}
}
class SubExperiment extends AbstractExperiment {
private $experiment;
private $parentExperiment;
private $tissue;
function __construct($experiment_in, Experiment $parentExperiment_in) {
$this->experiment = $experiment_in;
$this->parentExperiment = $parentExperiment_in;
$this->tissue = NULL;
}
function getExperiment() {
return $this->experiment;
}
function getParentExperiment() {
return $this->parentExperiment;
}
function getTissue() {
if (NULL != $this->tissue) {
return $this->tissue;
} else {
return $this->parentExperiment->getTissue();
}
}
}
//This class and all further sub classes work in the same way as SubExperiment above
class SubSubExperiment extends AbstractExperiment {
private $experiment;
private $parentExperiment;
private $tissue;
function __construct($experiment_in, Experiment $parentExperiment_in) { //as above }
function getExperiment() { //same as above }
function getParentExperiment() { //same as above }
function getTissue() { //same as above }
}
Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow