_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 fancy conversion to xml from array ... return simplexml_load_string($data); } } $service = new Webservice(array('foo' => 'bar')); $service->addDecorator(new JsonDecorator()); echo $service->renderData();