/** * Padrão de Projeto Factory * * Produção de Carrinho de Compras utilizando como base um identificador o * nome da classe da camada de persistência, onde os parâmetros apresentados * serão utilizados durante a sua construção. Os parâmetros variam de acordo * com a classe de persistência utilizada. * * @param string $storage Nome da Classe de Persistência * @param array $params Parâmetros de Configuração * @return Hazel_Shop_Basket_Basket|null Resultado Solicitado */ public static function factory($storage, array $params = array()) { // Conversão $storage = (string) $storage; // Verificação de Armazenamento e Comportamento if (!class_exists($storage) || in_array('F1S_Shop_Basket_StorageInterface', class_implements($storage))) { throw new F1S_Shop_Basket_Exception("Invalid Storage Class: '{$storage}'"); } // Criação do Armazenador $persistence = new $storage($params); // Captura do Carrinho de Compras $basket = null; try { // Camada de Persistência $basket = $persistence->read(); } catch (Exception $e) { // Erro Encontrado $basket = null; } // Analisar Tipo do Objeto if (!$basket instanceof self) { $basket = null; } // Existência de Elemento if ($basket === null) { $basket = new self(); } // Configurar Persistência $basket->_setStorage($persistence); // Resultados return $basket; }