diff --git a/Decorator/Decorator.php b/Decorator/Decorator.php new file mode 100644 index 0000000..d1ea220 --- /dev/null +++ b/Decorator/Decorator.php @@ -0,0 +1,84 @@ +_data = $data; + } + + /** + * + * + * @param WebserviceDecorator $decorator + * @return void + */ + public function addDecorator(WebserviceDecorator $decorator) + { + $this->_decorators[] = $decorator; + } + + /** + * @return string + */ + public function renderData() + { + $response = ''; + foreach ($this->_decorators as $decorator) { + $response = $decorator->renderData($this->_data); + } + + return $response; + } +} + +interface WebserviceDecorator +{ + public function renderData($data); +} + +class JsonDecorator implements WebserviceDecorator +{ + public function renderData($data) + { + return json_encode($data); + } +} + +class XmlDecorator implements WebserviceDecorator +{ + public function renderData($data) + { + // do some fany conversion to xml from array ... + return simplexml_load_string($data); + } +} + +$service = new Webservice(array('foo' => 'bar')); +$service->addDecorator(new JsonDecorator()); +echo $service->renderData(); \ No newline at end of file