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:

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

CODE

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

CODE

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

CODE

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

CODE

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

CODE

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

CODE

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

CODE

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

CODE

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

CODE

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

CODE

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

CODE

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

CODE

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

CODE

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

CODE

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

CODE

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

CODE

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

CODE

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

CODE

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

CODE

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

CODE

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

CODE

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

CODE

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

CODE

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.

Mais sobre...

results matching ""

    No results matching ""