Víme že Skautis vytváří objekty pro webové služby automaticky. WebServiceFactory dává způsob jak toto vytváření upravit. Předpokládejme že chceme logovat všechny request na Skautis a máme připravený web service decorator
class LoggingWebServiceFactory implements WebServiceFactoryInterface
{
//Logger pro logovani vsech requestu na SkautIS
protected $logger;
public function __construct(Logger $logger)
{
$this->logger = $logger;
}
public function createWebService($url, array $options)
{
$webService = new WebService($url, $options);
$webService = new LoggerDecorator($webService, $this->logger);
return $webService;
}
}
V konfiguraci nahradíme defaultní WebServiceFactory na nasi novou factory. A to je vše. Logování funguje bez jediné změny v aplikačním kódu.