SlideShare uma empresa Scribd logo
1 de 6
Baixar para ler offline
O cliente é totalmente dissociado dos detalhes de implementação de classes
derivadas. criação polimórfica é agora possível.
Exemplo
O Factory Method define uma interface para criar objetos, mas deixa as subclasses
decidirem quais as classes instanciar.
prensas de moldagem por injecção demonstrar este padrão. Os fabricantes de brinquedos processo de
moldagem de plástico em pó de plástico, e injectar o plástico para dentro de moldes de formas desejadas. A
classe de brinquedo (carro, figura acção, etc.) é determinado pelo molde.
Factory Method | 53
Lista de controle
1. Se você tem uma hierarquia de herança que exerce polimorfismo,1. Se você tem uma hierarquia de herança que exerce polimorfismo,
considere adicionar uma capacidade de criação de polimórfica, definindo um
estático método de fábrica na classe base.estático método de fábrica na classe base.
2. Projetar os argumentos para o método de fábrica. Que qualidades ou2. Projetar os argumentos para o método de fábrica. Que qualidades ou
características são necessárias e suficientes para identificar a classe derivada correta
para instanciar?
3. Considere a concepção de um "pool de objetos" interno que permitirá que objetos3. Considere a concepção de um "pool de objetos" interno que permitirá que objetos
para ser reutilizado em vez de criado a partir do zero.
4. Considere fazer todos os construtores privado ou protegido.4. Considere fazer todos os construtores privado ou protegido.4. Considere fazer todos os construtores privado ou protegido.4. Considere fazer todos os construtores privado ou protegido.4. Considere fazer todos os construtores privado ou protegido.
Regras de ouro
aulas Abstract Factory são frequentemente implementadas com métodos de fábrica, mas
eles podem ser implementados usando Prototype.
Métodos de fábrica são geralmente chamados de dentro de métodos de modelo.
Factory Method: criação por meio de herança. Protótipo: criação por meio de
delegação.
Muitas vezes, projetos começam usando Factory Method (menos complicado, mais
personalizável, subclasses proliferam) e evoluir em direção Abstract 54 | Factory Method
Factory Method | 55
Fábrica, Protótipo, ou Builder (mais flexível, mais complexo) como o designer descobre onde
é necessária uma maior flexibilidade.
Prototype não requer subclassificação, mas exige uma operação de inicialização.
Factory Method requer subclassificação, mas não exige Inicializar.
A vantagem de um método de fábrica é que ele pode retornar a mesma instância várias vezes,
ou pode retornar uma subclasse em vez de um objeto desse tipo exato.
Alguns defensores método de fábrica recomendamos que por uma questão de design de
linguagem (ou na sua falta, por uma questão de estilo) absolutamente todos os construtores deve
ser privada ou protegida. É um negócio de mais ninguém se uma classe fabrica um novo objeto ou
recicla um antigo.
o Novo operador considerado nocivo. Há uma diferença entre o pedido de um objeto eo Novo operador considerado nocivo. Há uma diferença entre o pedido de um objeto eo Novo operador considerado nocivo. Há uma diferença entre o pedido de um objeto e
criar um. o Novo operador sempre cria um objeto, e não para encapsular a criação docriar um. o Novo operador sempre cria um objeto, e não para encapsular a criação docriar um. o Novo operador sempre cria um objeto, e não para encapsular a criação do
objeto. Um método de depósito impõe que o encapsulamento, e permite que um objecto a
ser solicitado sem acoplamento indissolúvel ao acto de criação.
56 | flyweight
flyweight
Intenção
• Usar compartilhamento para suportar um grande número de objetos de grão fino de forma eficiente.
• A estratégia Motif GUI de substituir peso-pesado widgets com aparelhos leves.
Problema
Projetar objetos para baixo para os níveis mais baixos do sistema de "granularidade" fornece
flexibilidade ideal, mas pode ser inaceitavelmente caro em termos de desempenho e uso de
memória.
Discussão
O padrão Flyweight descreve como compartilhar objetos para permitir seu uso em granularities
finas sem custos proibitivos. Cada objecto "contrapeso" é dividido em duas partes: a parte
dependente do estado (extrínseca), e a parte independente do estado (intrínseco). estado intrínseco é
armazenado (compartilhado) no objeto Flyweight. estado extrínseco é armazenado ou calculados
pelos objetos do cliente, e passado para o Flyweight quando suas operações são invocadas.
Uma ilustração dessa abordagem seria widgets do Motif que foram re-engenharia, como
aparelhos leves. Considerando os widgets são "inteligentes" o suficiente para estar no seus
próprios; existem dispositivos em uma relação de dependência com seu widget gerenciador de
layout pai.
Cada gerenciador de layout proporciona um comportamento dependente do contexto de eventos, gestão
imobiliária e serviços de recursos para seus dispositivos flyweight, e cada gadget é apenas responsável por
estado e comportamento independente do contexto.
Estrutura
Contrapesos são armazenados no repositório de uma fábrica. O cliente restringe-se
de criar contrapesos diretamente, e solicita-los do
Fábrica. Cada Flyweight não pode ficar em sua própria. Todos os atributos que tornam o
compartilhamento impossível deve ser fornecido pelo cliente sempre que é feita uma solicitação do
Flyweight. Se o contexto presta-se a "economia de escala" (ou seja, o cliente pode facilmente
calcular ou olhar-se os atributos necessários), então o padrão Flyweight oferece alavancagem
apropriada.
o Formiga, Gafanhoto, e Barata classes podem ser leveo Formiga, Gafanhoto, e Barata classes podem ser leveo Formiga, Gafanhoto, e Barata classes podem ser leveo Formiga, Gafanhoto, e Barata classes podem ser leveo Formiga, Gafanhoto, e Barata classes podem ser leveo Formiga, Gafanhoto, e Barata classes podem ser leveo Formiga, Gafanhoto, e Barata classes podem ser leve
porque seu estado específico da instância tem sido de-encapsulado, ou exteriorizada, e
devem ser fornecidos pelo cliente.
flyweight | 57
Exemplo
A Mosca usa compartilhamento para suportar grandes quantidades de objetos de forma eficiente.
A rede pública de telefonia comutada é um exemplo de uma Flyweight. Existem vários recursos,
como geradores de tom de discagem, geradores de toque, e receptores de dígitos que devem ser
compartilhadas entre todos os assinantes. Um assinante não tem conhecimento de quantos recursos
estão na piscina quando ele ou ela levanta o fone para fazer uma chamada. Tudo o que importa para os
assinantes é que um tom de discagem é fornecido, dígitos são recebidos, e a chamada é completada.
Lista de controle
1. Garantir que objeto sobrecarga é um problema que necessita de atenção, e, a1. Garantir que objeto sobrecarga é um problema que necessita de atenção, e, a
cliente da classe é capaz e disposto a absorver responsabilidade realinhamento.
2. Divide estado da classe alvo em: estado shareable (intrínseco), e2. Divide estado da classe alvo em: estado shareable (intrínseco), e
não-shareable (extrínseca) estado.
3. Retire o estado não-compartilháveis ​​dos atributos de classe e adicioná-lo3. Retire o estado não-compartilháveis ​​dos atributos de classe e adicioná-lo
a lista de argumentos chamando de métodos afetadas.
4. Criar uma fábrica que pode armazenar em cache e reutilizar instâncias de classe existentes.4. Criar uma fábrica que pode armazenar em cache e reutilizar instâncias de classe existentes.
5. O cliente deve usar a fábrica em vez do novo operador5. O cliente deve usar a fábrica em vez do novo operador
Pedido de objetos.
6. O cliente (ou um terceiro) deve olhar-para cima ou para calcular a não-6. O cliente (ou um terceiro) deve olhar-para cima ou para calcular a não-
Estado compartilhável, e da oferta que o estado de métodos de classe.
58 | flyweight

Mais conteúdo relacionado

Semelhante a padrao de projeto3

Semelhante a padrao de projeto3 (20)

padrao de projeto1
padrao de projeto1padrao de projeto1
padrao de projeto1
 
padrao de projeto0
padrao de projeto0padrao de projeto0
padrao de projeto0
 
Prototype1 - thiago
Prototype1 - thiagoPrototype1 - thiago
Prototype1 - thiago
 
Gof design patterns
Gof design patternsGof design patterns
Gof design patterns
 
Factory apresentacao
Factory   apresentacaoFactory   apresentacao
Factory apresentacao
 
Abstract
AbstractAbstract
Abstract
 
Padroes de Projetos e aplicações- parte 01
Padroes de Projetos e aplicações- parte 01Padroes de Projetos e aplicações- parte 01
Padroes de Projetos e aplicações- parte 01
 
Hexagonal Rails
Hexagonal RailsHexagonal Rails
Hexagonal Rails
 
Design Patterns - Aula 2
Design Patterns - Aula 2Design Patterns - Aula 2
Design Patterns - Aula 2
 
Padroes de projetos gof
Padroes de projetos gofPadroes de projetos gof
Padroes de projetos gof
 
Prototype
PrototypePrototype
Prototype
 
Coletanea UML e OO (ESAF) - Jaime Correia
Coletanea UML e OO (ESAF) - Jaime CorreiaColetanea UML e OO (ESAF) - Jaime Correia
Coletanea UML e OO (ESAF) - Jaime Correia
 
Test driven development
Test driven developmentTest driven development
Test driven development
 
Padroes de Projeto
Padroes de ProjetoPadroes de Projeto
Padroes de Projeto
 
Introdução a CDI e como utilizá-la em aplicações reais
Introdução a CDI e como utilizá-la em aplicações reaisIntrodução a CDI e como utilizá-la em aplicações reais
Introdução a CDI e como utilizá-la em aplicações reais
 
Teste unitário
Teste unitárioTeste unitário
Teste unitário
 
Tutorial Java: Herança
Tutorial Java: HerançaTutorial Java: Herança
Tutorial Java: Herança
 
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdf
 
Travalho versao final
Travalho versao finalTravalho versao final
Travalho versao final
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 

Mais de Walney Negreiros

Mais de Walney Negreiros (8)

padrao de projeto2
padrao de projeto2padrao de projeto2
padrao de projeto2
 
Padroes de Projetos e aplicações- parte 02
Padroes de Projetos e aplicações- parte 02Padroes de Projetos e aplicações- parte 02
Padroes de Projetos e aplicações- parte 02
 
Singleton varianca
Singleton variancaSingleton varianca
Singleton varianca
 
Pleonasmo
PleonasmoPleonasmo
Pleonasmo
 
Anafora
AnaforaAnafora
Anafora
 
Ebep alunos-apresenta~çao
Ebep alunos-apresenta~çaoEbep alunos-apresenta~çao
Ebep alunos-apresenta~çao
 
Problemas de hardware e software
Problemas de hardware e softwareProblemas de hardware e software
Problemas de hardware e software
 
INCAS
INCAS INCAS
INCAS
 

padrao de projeto3

  • 1. O cliente é totalmente dissociado dos detalhes de implementação de classes derivadas. criação polimórfica é agora possível. Exemplo O Factory Method define uma interface para criar objetos, mas deixa as subclasses decidirem quais as classes instanciar. prensas de moldagem por injecção demonstrar este padrão. Os fabricantes de brinquedos processo de moldagem de plástico em pó de plástico, e injectar o plástico para dentro de moldes de formas desejadas. A classe de brinquedo (carro, figura acção, etc.) é determinado pelo molde. Factory Method | 53
  • 2. Lista de controle 1. Se você tem uma hierarquia de herança que exerce polimorfismo,1. Se você tem uma hierarquia de herança que exerce polimorfismo, considere adicionar uma capacidade de criação de polimórfica, definindo um estático método de fábrica na classe base.estático método de fábrica na classe base. 2. Projetar os argumentos para o método de fábrica. Que qualidades ou2. Projetar os argumentos para o método de fábrica. Que qualidades ou características são necessárias e suficientes para identificar a classe derivada correta para instanciar? 3. Considere a concepção de um "pool de objetos" interno que permitirá que objetos3. Considere a concepção de um "pool de objetos" interno que permitirá que objetos para ser reutilizado em vez de criado a partir do zero. 4. Considere fazer todos os construtores privado ou protegido.4. Considere fazer todos os construtores privado ou protegido.4. Considere fazer todos os construtores privado ou protegido.4. Considere fazer todos os construtores privado ou protegido.4. Considere fazer todos os construtores privado ou protegido. Regras de ouro aulas Abstract Factory são frequentemente implementadas com métodos de fábrica, mas eles podem ser implementados usando Prototype. Métodos de fábrica são geralmente chamados de dentro de métodos de modelo. Factory Method: criação por meio de herança. Protótipo: criação por meio de delegação. Muitas vezes, projetos começam usando Factory Method (menos complicado, mais personalizável, subclasses proliferam) e evoluir em direção Abstract 54 | Factory Method
  • 3. Factory Method | 55 Fábrica, Protótipo, ou Builder (mais flexível, mais complexo) como o designer descobre onde é necessária uma maior flexibilidade. Prototype não requer subclassificação, mas exige uma operação de inicialização. Factory Method requer subclassificação, mas não exige Inicializar. A vantagem de um método de fábrica é que ele pode retornar a mesma instância várias vezes, ou pode retornar uma subclasse em vez de um objeto desse tipo exato. Alguns defensores método de fábrica recomendamos que por uma questão de design de linguagem (ou na sua falta, por uma questão de estilo) absolutamente todos os construtores deve ser privada ou protegida. É um negócio de mais ninguém se uma classe fabrica um novo objeto ou recicla um antigo. o Novo operador considerado nocivo. Há uma diferença entre o pedido de um objeto eo Novo operador considerado nocivo. Há uma diferença entre o pedido de um objeto eo Novo operador considerado nocivo. Há uma diferença entre o pedido de um objeto e criar um. o Novo operador sempre cria um objeto, e não para encapsular a criação docriar um. o Novo operador sempre cria um objeto, e não para encapsular a criação docriar um. o Novo operador sempre cria um objeto, e não para encapsular a criação do objeto. Um método de depósito impõe que o encapsulamento, e permite que um objecto a ser solicitado sem acoplamento indissolúvel ao acto de criação.
  • 4. 56 | flyweight flyweight Intenção • Usar compartilhamento para suportar um grande número de objetos de grão fino de forma eficiente. • A estratégia Motif GUI de substituir peso-pesado widgets com aparelhos leves. Problema Projetar objetos para baixo para os níveis mais baixos do sistema de "granularidade" fornece flexibilidade ideal, mas pode ser inaceitavelmente caro em termos de desempenho e uso de memória. Discussão O padrão Flyweight descreve como compartilhar objetos para permitir seu uso em granularities finas sem custos proibitivos. Cada objecto "contrapeso" é dividido em duas partes: a parte dependente do estado (extrínseca), e a parte independente do estado (intrínseco). estado intrínseco é armazenado (compartilhado) no objeto Flyweight. estado extrínseco é armazenado ou calculados pelos objetos do cliente, e passado para o Flyweight quando suas operações são invocadas. Uma ilustração dessa abordagem seria widgets do Motif que foram re-engenharia, como aparelhos leves. Considerando os widgets são "inteligentes" o suficiente para estar no seus próprios; existem dispositivos em uma relação de dependência com seu widget gerenciador de layout pai. Cada gerenciador de layout proporciona um comportamento dependente do contexto de eventos, gestão imobiliária e serviços de recursos para seus dispositivos flyweight, e cada gadget é apenas responsável por estado e comportamento independente do contexto. Estrutura Contrapesos são armazenados no repositório de uma fábrica. O cliente restringe-se de criar contrapesos diretamente, e solicita-los do
  • 5. Fábrica. Cada Flyweight não pode ficar em sua própria. Todos os atributos que tornam o compartilhamento impossível deve ser fornecido pelo cliente sempre que é feita uma solicitação do Flyweight. Se o contexto presta-se a "economia de escala" (ou seja, o cliente pode facilmente calcular ou olhar-se os atributos necessários), então o padrão Flyweight oferece alavancagem apropriada. o Formiga, Gafanhoto, e Barata classes podem ser leveo Formiga, Gafanhoto, e Barata classes podem ser leveo Formiga, Gafanhoto, e Barata classes podem ser leveo Formiga, Gafanhoto, e Barata classes podem ser leveo Formiga, Gafanhoto, e Barata classes podem ser leveo Formiga, Gafanhoto, e Barata classes podem ser leveo Formiga, Gafanhoto, e Barata classes podem ser leve porque seu estado específico da instância tem sido de-encapsulado, ou exteriorizada, e devem ser fornecidos pelo cliente. flyweight | 57
  • 6. Exemplo A Mosca usa compartilhamento para suportar grandes quantidades de objetos de forma eficiente. A rede pública de telefonia comutada é um exemplo de uma Flyweight. Existem vários recursos, como geradores de tom de discagem, geradores de toque, e receptores de dígitos que devem ser compartilhadas entre todos os assinantes. Um assinante não tem conhecimento de quantos recursos estão na piscina quando ele ou ela levanta o fone para fazer uma chamada. Tudo o que importa para os assinantes é que um tom de discagem é fornecido, dígitos são recebidos, e a chamada é completada. Lista de controle 1. Garantir que objeto sobrecarga é um problema que necessita de atenção, e, a1. Garantir que objeto sobrecarga é um problema que necessita de atenção, e, a cliente da classe é capaz e disposto a absorver responsabilidade realinhamento. 2. Divide estado da classe alvo em: estado shareable (intrínseco), e2. Divide estado da classe alvo em: estado shareable (intrínseco), e não-shareable (extrínseca) estado. 3. Retire o estado não-compartilháveis ​​dos atributos de classe e adicioná-lo3. Retire o estado não-compartilháveis ​​dos atributos de classe e adicioná-lo a lista de argumentos chamando de métodos afetadas. 4. Criar uma fábrica que pode armazenar em cache e reutilizar instâncias de classe existentes.4. Criar uma fábrica que pode armazenar em cache e reutilizar instâncias de classe existentes. 5. O cliente deve usar a fábrica em vez do novo operador5. O cliente deve usar a fábrica em vez do novo operador Pedido de objetos. 6. O cliente (ou um terceiro) deve olhar-para cima ou para calcular a não-6. O cliente (ou um terceiro) deve olhar-para cima ou para calcular a não- Estado compartilhável, e da oferta que o estado de métodos de classe. 58 | flyweight