Baixe o app para aproveitar ainda mais
Prévia do material em texto
Universidade Federal do Maranhão – UFMA Centro de Ciências Exatas e Tecnológicas – CCET Curso de Ciência da Computação Disciplina: Tópicos Avançados em Linguagem de Programação Aluno: Mayckerson Alexandre Franco Santos – CP 99111-19 Trabalho referente à 2ª Avaliação RELAÇÕES ENTRE PADRÕES DE PROJETO Factory Method O padrão Factory é útil para se construir objetos individuais, para um propósito específico, sem que a construção requeira conhecimento das classes específicas sendo instanciadas. Se você precisar criar um grupo combinado de tais objetos, então o padrão Abstract Factory é o mais apropriado. São usualmente chamados dentro de Template Methods. Abstract Factory Parece semelhante ao padrão Factory Method, mas em vez do cliente (que quer criar objetos sem saber as classes exatas) chamar um método de criação (Factory Method), ele de alguma forma possui um objeto (uma Abstract Factory) e usa este objeto para chamar os métodos de criação. Onde Factory Method quer que você seja diferente (via herança) para criar objetos diferentes, o Abstract Factory quer que você tenha algo diferente. As classes Abstract Factory normalmente são implementadas com Factory Methods, mas podem também ser implementados usando Prototype. Se tivermos muitas famílias de produtos, teríamos um excesso de classes “fábricas concretas”. Para resolver este problema, podemos usar o Prototype: criamos um dicionário mapeando tipos de produtos em instâncias prototípicas destes produtos. Então, sempre que precisarmos criar um novo produto pedimos à sua instância prototípica que crie um clone. Isto é particularmente importante em linguagens não dinâmicas como C++ e em linguagens "semi-dinâmicas" como Java. Em Smalltalk, não é tão relevante. Uma classe do tipo Concrete Factory frequentemente é um Singleton para garantir sua instanciação única. Builder Abstract Factory é semelhante a Builder no sentido de que também pode construir objetos complexos. A diferença prinicipal é que o padrão Builder focaliza a construção de um objeto complexo passo a passo. A ênfase do Abstract Factory é sobre as famílias de objetos-produtos (simples ou complexos). O Builder retorna o produto como um passo final, mas no caso do padrão Abstract Factory o produto é retornado imediatamente. Um padrão Composite é o que frequentemente o Builder constrói. Singleton Muito patterns, como o Abstract Factory e o Builder podem ser implementados usando o pattern Singleton, para garantir apenas uma instância da classe. Iterator Iterators são frequentemente aplicados a estruturas recursivas tais como o Composite (usado para percorrer). Iterators polimórficos delegam aos Factory Methods a instanciação da subclasse do Iterator apropriado. Strategy Um Strategy permite uma mudança no seu funcionamento interno. Um Decorator permite agregar uma mudança à “superfície” de um objeto. Essas são as duas maneiras de mudar o comportamento de um objeto. Template Method Factory Methods são frequentemente chamados de Template Methods. Template Methods usam herança para variar partes de um algoritmo. Strategies usam delegação para variar todo o algoritmo. Composite O padrão Decorator é freqüentemente usado com o padrão Composite. Quando decoradores e compostos são usados juntos, eles têm nornalmente uma classe-mãe comum. Assim, decoradores terão que suportar a interface de componente. O padrão Iterator pode ser usado para percorrer os compostos. Decorator Um Decorator poderia ser visto como um Composite simplificado que tem apenas um Component. Contudo, ele adiciona novas responsabilidades; Ele não tem como intenção a agregação de objetos. Proxy Embora o Decorator tenha implementações similares a do Proxy, ele tem um propósito diferente. O Decorator adiciona uma ou mais responsabilidades ao objeto, enquanto o Proxy controla o acesso ao objeto,. O Proxy varia o grau em que é implementado como o Decorator. Um Protection Proxy deve ser implementado exatamente como um Decorator. Já um Remote Proxy não deverá conter uma referência direta a sua classe Subject, apenas uma referência indireta. Um Virtual Proxy deverá se iniciar com uma referência indireta, tal como um nome de arquivo, mas eventualmente irá obter e usar uma referência direta.
Compartilhar