GoF
O acrônimo GoF - Gang of Four refere-se aos autores do primeiro livro sobre padrões em software - Design Patterns: Elements of Reusable Object-Oriented Software dos autores Erich Gamma, John Vlissides, Ralph Jonhson e Richard Helm em que explanam um catálogo de 23 genéricas soluções para o desenvolvimento de software no paradigma orientado a objetos, a obra traz a ideia do trabalho de Christopher Alexander em seu livro sobre arquitetura urbana - A Pattern Language: Towns, Buildings, Construction.
Os Design Patterns do livro são: "descrições de objetos e classes comunicantes que precisam ser personalizadas para resolver um problema geral de projeto num contexto particular".
Os princípios por trás dos padrões estão:
- Programe para uma interface, não para uma implementação - Program to an interface, not to an implementation: introduzido no livro do GoF, recomenda o uso de abstrações como ponto de acesso entre elementos de programação.
- Prefira a composição de objeto à herança de classe - Favor object composition over class inheritance: introduzido no livro do GoF, recomenda o uso de composição à herança na construção elementos de programação.
Classificação
Classificação segundo GoF:
Propósito | ||||
---|---|---|---|---|
Criação | Estrutural | Comportamento | ||
Creational | Structural | Behavioral | ||
------------ | ------------ | ------------------ | ------------------ | ------------------------- |
Escopo | Classe | Factory Method | Adapter (Class) | Interpreter |
Scope | Class | Template Method | ||
------------ | ------------ | ------------------ | ------------------ | ------------------------- |
Objeto | Abstract Factory | Adapter (Object) | Chain of Responsability | |
Object | Builder | Bridge | Command | |
Prototype | Composite | Iterator | ||
Singleton | Decorator | Mediator | ||
Facade | Memento | |||
Flyweight | Observer | |||
Proxy | State | |||
Strategy | ||||
Visitor |
Classificação segundo Metsker:
Intenção | Padrões |
---|---|
1. Interfaces | Adapter, Facade, Composite, Bridge |
2. Responsabilidade | Singleton, Observer, Mediator, Proxy, Chain of Responsibility, Flyweight |
3. Construção | Builder, Factory Method, Abstract Factory, Prototype, Memento |
4. Operações | Template Method, State, Strategy, Command, Interpreter |
5. Extensões | Decorator, Iterator, Visitor |
Relacionamento
Relacionamento entre padrões:
Padrões
Os padrões do GoF focam nos aspectos de criação, estrutural e comportamento dos elementos de programação.
Criação
Os padrões de criação focam na eficiência do processo de instanciação.
Abstract Factory
O padrão Abstract Factory prove uma interface para criar uma família de objetos relacionados ou dependentes sem especificar suas classes concretas.
Conhecido como: Kit.
Do GoF:
Provide an interface for creating families of related or dependent objects without specifying their concrete classes.
Builder
O padrão Builder separa a construção de um objeto complexo da sua representação de modo que o mesmo processo de construção possa criar diferentes representações.
Do GoF:
Separate the construction of a complex object from its representation so that the same construction process can create different representations.
Factory Method
O padrão Factory Method define uma interface para criar um objeto, mas deixa as subclasses decidirem que classe instanciar. O Factory Method permite adiar a instanciação para subclasse.
Conhecido como: Virtual Constructor.
Do GoF:
Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses.
Características:
- Cria através de herança.
Prototype
O padrão Prototype especifica os tipos de objetos a serem criados usando uma instância-protótipo e cria novos objetos pela cópia desse protótipo.
Do GoF:
Specify the kinds of objects to create using a prototypical instance, and create new objects by copying this prototype.
Características:
- Cria através de delegação.
Singleton
O padrão Singleton garante que uma classe tenha somente uma instância e forneça um ponto global de acesso para a mesma.
Do GoF:
Ensure a class only has one instance, and provide a global point of access to it.
Características:
- Pode ser substituído pelo Dependency Injection.
- DoubleCheckSingleton é um anti-pattern.
- Objetos podem ser mutáveis.
- Benefícios:
- cross platform;
- applicable to any class;
- can be created through derivation; and
- lazy evaluation.
- Custos:
- destruction is undefined;
- not inherited;
- efficiency; and
- nontransparent.
Estrutural
Os padrões estrutural focam na composição e no relacionamento entre elementos de programação.
Adapter
O padrão Adapter converte a interface de uma classe em outra interface, esperada pelos clientes. O Adapter permite que classes com interfaces incompatíveis trabalhem em conjunto - o que de outra foram seria impossível.
Conhecido como: Wrapper.
Do GoF:
Convert the interface of a class into another interface clients expect. Adapter lets classes work together that couldn't otherwise because of incompatible interfaces.
Bridge
O padrão Bridge desacopla uma abstração da sua implementação, de modo que as duas possam variar independentemente.
Conhecido como: Handle/Body.
Do GoF:
Decouple an abstraction from its implementation so that the two can vary independently.
Composite
O padrão Composite compõe objetos em estruturas de árvore para representarem hierarquias parte-todo. Composite permite aos clientes tratarem de maneira uniforme objetos individuais e composições de objetos.
Do GoF:
Compose objects into tree structures to represent part-whole hierarchies. Composite lets clients treat individual objects and compositions of objects uniformly.
Decorator
O padrão Decorator anexa dinamicamente responsabilidades adicionais a um objeto. Os Decorators fornecem uma alternativa flexível ao uso de subclasses para extensão de funcionalidades.
Conhecido como: Wrapper.
Do GoF:
Attach additional responsibilities to an object dynamically. Decorators provide a flexible alternative to subclassing for extending functionality.
Facade
O padrão Facade fornece uma interface unificada para um conjunto de interfaces em um subsistema. Facade define uma interface de nível mais alto que torna o subsistema mais fácil de ser usado.
Do GoF:
Provide a unified interface to a set of interfaces in a subsystem. Facade defines a higher-level interface that makes the subsystem easier to use.
Flyweight
O padrão Flyweight usa compartilhamento para suportar eficientemente grandes quantidades de objetos de granularidade fina.
Do GoF:
Use sharing to support large numbers of fine-grained objects efficiently.
Proxy
O padrão Proxy fornece um substituto ou marcador da localização de outro objeto para controlar o acesso a esse objeto.
Conhecido como: Surrogate.
Do GoF:
Provide a surrogate or placeholder for another object to control access to it.
Tipos: Remote, Virtual, Protection, Smart Reference, Firewall, Caching, Synchronization, Complexity Hiding, Copy-On-Write e Logging.
Comportamento
Os padrões de comportamento focam na comunicação entre elementos de programação.
Chain of Responsibility
O padrão Chain of Responsibility evita o acoplamento do remetente de uma solicitação ao seu receptor, ao dar a mais de um objeto a oportunidade de tratar a solicitação. Encadea os objetos receptores, passando a solicitação ao longo da cadeia até que um objeto a trate.
Do GoF:
Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request. Chain the receiving objects and pass the request along the chain until an object handles it.
Command
O padrão Command encapsula uma solicitação como um objeto, desta forma permitindo parametrizar clientes em diferentes solicitações, enfileira ou faz registro (log) de solicitações e suporta operações que podem ser desfeitos.
Conhecido como: Action, Transaction.
Do GoF:
Encapsulate a request as an object, thereby letting you parameterize clients with different requests, queue or log requests, and support undoable operations.
Interpreter
O padrão Interpreter, dada uma linguagem, define uma representação para a sua gramática juntamente com um interpretador que usa a representação para interpretar sentenças dessa linguagem.
Do GoF:
Given a language, define a represention for its grammar along with an interpreter that uses the representation to interpret sentences in the language.
Iterator
O padrão Iterator fornece meios de acessar, sequencialmente, os elementos de um objeto agregado sem expor a sua representação subjacente.
Conhecido como: Cursor.
Do GoF:
Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.
Mediator
O padrão Mediator define um objeto que encapsula a forma como um conjunto de objetos interage. O Mediator promove o acomplamento fraco ao evitar que os objetos se refiram uns aos outros explicitamente e permite variar suas interações independentemente.
Do GoF:
Define an object that encapsulates how a set of objects interact. Mediator promotes loose coupling by keeping objects from referring to each other explicitly, and it lets you vary their interaction independently.
Memento
O padrão Memento, sem violar o encapsulamento, captura e externaliza um estado interno de um objeto, de maneiras que o objeto possa ser restaurado para esse estado mais tarde.
Conhecido como: Token.
Do GoF:
Without violating encapsulation, capture and externalize an object's internal state so that the object can be restored to this state later.
Observer
O padrão Observer define uma dependência um-para-muitos entre objetos, de maneira que quando um objeto muda de estado, todos os seus dependentes são notificados e atualizados automaticamente.
Conhecido como: Dependents, Publish-Subscribe.
Do GoF:
Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.
State
O padrão State permite a um objeto alterar seu comportamento quando o seu estado interno muda. O objeto parecerá ter mudado sua classe.
Conhecido como: Objects for States.
Do GoF:
Allow an object to alter its behavior when its internal state changes. The object will appear to change its class.
Strategy
O padrão Strategy define uma família de algoritmos, encapsula cada uma delas e torná-las intercambiáveis. Strategy permite que o algoritmo varie independentemente dos clientes que o utilizam.
Conhecido como: Policy.
Do GoF:
Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it.
Template Method
O padrão Template Method define o esqueleto de um algoritmo em uma operação, postergando alguns passos para as subclasses. Template Method permite que subclasses redefinam certos passos de um algoritmo sem mudar a estrutura do mesmo.
Do GoF:
Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure.
Visitor
O padrão Visitor representa uma operação a ser executada nos elementos de uma estrutura de objetos. Visitor permite definir uma nova operação sem mudar as classes dos elementos sobre os quais opera.
Do GoF:
Represent an operation to be performed on the elements of an object structure. Visitor lets you define a new operation without changing the classes of the elements on which it operates.