Neste post tenho como intuito fazer uma breve introdução com relação aos Padrões de Projeto ou Design Patterns.
Estas técnicas são extremamente importantes para o desenvolvedor de software orientado a objetos, pois a sua utilização na solução de problemas condizentes com o padrão, permitem o desenvolvimento de soluções robustas, com alto grau de reutilização e fácil manutenção.
Padrões de projeto ou Design Patterns, são soluções para problemas recorrentes, que ja foram testados e homologados, utilizados no desenvolvimento de software orientado a objeto. Basicamente os padrões são divididos em 3 tipos, sendo padrões de Criação, Estruturais e Comportamentais.
Os padrões de Criação visam solucionar problemas referentes a criação de objetos, que pode dificultar o desenho da aplicação e aumentar a complexidade do mesmo. Visam controlar a forma como os objetos são criados e o momento de sua instanciação, permitindo que o software se torne independente de todo este processo.
Os padrões Estruturais trabalham com a composição de classes ou Objetos para formação de estruturas maiores, descrevem formas de compor objetos para obtenção de novas funcionalidades, possibilidade para alterar a composição em tempo de execução, o que não é possível com uma hierarquia de classes, e utilizam herança para compor interfaces ou implementações .
Os padrões Comportamentais observam a maneira como as classes e objetos podem interagir, procupam-se com algorítimos e atribuição de responsabilidades entre os objetos, descreve tanto padrões de objetos e classes, como padrões de comunicação entre eles. Padrões comportamentais de classes utilizam herança para distribuir o comportamento entre classes e de Objetos utilizam composição em vez de herança para distribuir o comportamento entre objetos.
Neste primeiro post sobre o assunto vou exemplificar um padrão estrutural bastante conhecido, o Facade ou Fachada.
O Padrão Facade visa simplificar a utilização de um subsistema complexo implementando uma classe que fornece uma interface única e mais razoável. Quando você precisar dos recursos do subsistema complexo, eles continuarão existindo, mas, quando você precisar somente de uma interface simples, a Fachada desempenhará esse papel.
Uma definição mais técnica da Facade : Fornece uma interface unificada para um conjunto de interfaces em um subsistema. A Fachada define uma interface de nível mais alto que facilita a utilização do subsistema.
Abaixo segue um Diagrama demonstrativo do padrão :
(Clique na imagem para melhor visualização)
"Ninguém sabe tanto que não necessite aprender, ninguém sabe tão pouco que não possa ensinar. "