Manual do PHP
Anterior | Capítulo 19. Classes e Objetos (PHP 5) | Próxima

# Patterns

Padrões (Patterns) são formas de descrever melhores práticas e bons projetos. Eles mostram soluções flexíveis para problemas comuns de programação.

## Factory

O padrão Factory permite a instanciação de objetos em tempo de execução. É chamado de Factory uma vez que é responsável por "produzir" um objeto.

Exemplo 19-23. Factory Method
`<?php class Exemplo { // Factory method function &factory($type) { if (include_once 'Drivers/' . $type . '.php') { $classname = 'Driver_' . $type; return new $classname; } else { throw new Exception ('Driver não encontrado'); } } } ?>`
Definir esse método numa classe permite que drivers sejam carregados em tempo de execução. Se a classe Exemplo fosse uma classe de abstração de banco de dados, carregar um driver MySQL e um driver SQLite poderia ser feito como se segue:
`<?php // Carregar um driver MySQL $mysql = Exemplo::factory('MySQL'); // Carregar um driver SQLite $sqlite = Exemplo::factory('SQLite'); ?>`

## Singleton

O padrão Singleton se aplica em situações em que é preciso haver uma só instância de uma classe. O exemplo mais comum é uma conexão com um banco de dados. Implementar esse padrão permite ao programador fazer essa instância única ser facilmente acessível por muitos outros objetos.

Exemplo 19-24. Função Singleton
`<?php class Exemplo { // Guarda uma instância da classe static private $instance; // Um construtor privado private function __construct() { echo 'Sou um construtor'; } // O método singleton static public function singleton() { if (!isset(self::$instance)) { $c = __CLASS__; self::$instance = new $c; } return self::$instance; } // Método exemplo public function latir() { echo 'Au!'; } } ?>`
Isso permite que uma instância única de Exemplo seja recuperada.
`<?php // Isso falharia porque o construtor é privado $test = new Exemplo; // Isso sempre vai recuperar uma instância da classe $test = Exemplo::singleton(); $test->latir(); ?>`

Anterior | Principal | Próxima
Iteração de Objetos | Acima | Métodos Mágicos