padrões de projeto. Como mencionado na edição anterior, o artigo de hoje mostrará como os padrões estão classificados e alguns exemplos práticos.

A “gangue dos quatro” (GoF - pessoas que catalogaram os padrões de projeto mais comuns), realizou um grande trabalho de pesquisa que resultou em uma classificação dos padrões em algumas categorias: Criacionais, Estruturais e Comportamentais.

Nota: Como ficaria muito extensa a explicação e demonstração de cada padrão, demonstraremos apenas um padrão de cada classificação e nas referências do final do artigo maiores detalhes poderão ser encontrados.

 

Criacionais

Os padrões dessa categoria têm a característica de abstrair a instanciação e o processo de instanciação de objetos, de tal forma que um sistema pode não depender (saber) como são criados determinados objetos. Para conseguir essa independência e flexibilidade, os padrões criacionais encapsulam as classes concretas que existem. Nessa categoria existem cinco padrões mais comuns:

·                     Abstract Factory;

·                     Builder;

·                     Singleton;

·                     Prototype;

·                     Factory Method.

 

Factory Method

Fornece uma interface para criação de objetos, porém essa criação é determinada por suas subclasses. Vamos a um exemplo prático. Podemos utilizar esse padrão para abstrair a criação de formulários de nossos sistemas, para isso inicie um novo projeto no Delphi 7 (você pode utilizar também o Delphi 2005/2006) e organize o formulário principal como é exibido na Figura 1.

 

Figura 1. Formulário principal

 

Agora adicione mais três formulários e salve o projeto, podendo-se deixar os nomes padrão. Vamos agora criar nossa classe que usará o padrão Factory Method.  Crie uma nova unit no projeto e a salve como “FormFactoryU.pas” e adicione a classe da Listagem 1. Adicione também uma função pública, da qual nossa “fábrica” (Factory) de formulários será acessada:

 

function FormFactory: TFormFactory;

 

Nossa fábrica criará formulários por seus nomes, através do método CreateForm. Cada formulário que será criado deve registrar-se em nossa “fábrica”, através do método RegisterForm, para que ela possa instanciá-lo quando for necessário. Veja como o formulário 2 é registrado na Listagem 2.

 

Listagem 1. Classe Factory

uses Classes, Forms;

 

type

  TFormFactory = class

  private

    FList: TStrings;

  public

    constructor Create;

    destructor Destroy; override;

    function CreateForm(

      const aFormName: string): TForm;

    procedure RegisterForm(const aFormName: string;

      aFormClass: TComponentClass);

end; ...

Quer ler esse conteúdo completo? Tenha acesso completo