Ho una classe Color . Ha una proprietà model che è una classe che implementa l'interfaccia ColorModel , questa proprietà potrebbe essere una RGB , Hex o HSL classi che implementano l'interfaccia ColorModel .
// Color.php
class Color {
protected $model;
public static function factory (Model $model) {
return new Color($model);
}
public function __construct (Model $model) {
$this->model = $model;
}
public function getModel () {
return $this->model;
}
public function set ($color) {
$this->model->set($color);
}
public function raw ($string = false) {
return $this->model->raw($string);
}
public function check (Color $color) {
return get_class($this->model) === get_class($color->getModel());
}
public function isModel ($type) {
return $type === $this->model->getName();
}
// Converter probably suppose to be a strategy which converts color model to another color model
public function convert (Converter $convert) {
// I'm stack here...
}
}
// ColorModel.php
interface ColorModel {
// Parser is a class which parses input string/int and converts it to components
public function __construct (Parser $parser, $x, $y, $z);
public function raw ($string = false);
public function set ($color);
public function getName ();
}
Non sono sicuro di come implementare la conversione di ColorModel s. Come posso implementare la conversione di questi diversi modelli senza dover creare ogni classe per ogni set ( RGB2HSL , HSL2RGB . Diciamo che aggiungo LAB class quattro altre classi: LAB2RGB , LAB2HSL , HSL2LAB , RGB2LAB e altro ancora e altro)? È possibile a tutti?
Grazie per l'attenzione!