SlideShare uma empresa Scribd logo
1 de 14
Baixar para ler offline
Fábricas
Fábricas
• Simple Factory
Fábrica
Simples
• Factory Method
Método
Fábrica
• Abstract Factory
Fábrica
Abstrata
Programar para Interface
Relembrando o Strategy
  Como definir as variáveis de instância do
comportamento?
public class PatoSelvagem extends Pato {
public PatoSelvagem() {
modoDeVoar = new VoarComAsas();
modoDeGrasnar = new Quack();
}
}
Com classes concretas
relacionadas
Pato pato;
if (situacao1) {
pato = new PatoSelvagem();
} else if (situacao2) {
pato = new PatoDeBorracha();
} else if (situacao3) {
pato = new PatoCabecaVermelha();
}
Quais os riscos?
  Mudanças
  Criação de novas classes concretas apesar do
polimorfismo
  Como encapsular do resto do aplicativo
as partes que instanciam classes
concretas?
“Identificando os aspectos
que variam”
public Pizza pedirPizza() {
Pizza pizza = new Pizza();
pizza.preparar();
pizza.assar();
pizza.cortar();
pizza.embalar();
return pizza;
}
Precisamos mais que 1 Pizza
Determinando o sabor
da Pizza
public Pizza pedirPizza(String sabor) {
Pizza pizza = new Pizza();
if (sabor.equals("muzzarela")) {
pizza = new PizzaMuzzarela();
} else if (sabor.equals("calabresa")) {
pizza = new PizzaCalabresa();
} else if (sabor.equals("mista")) {
pizza = new PizzaMista();
}
pizza.preparar();
pizza.assar();
pizza.cortar();
pizza.embalar();
return pizza;
}
Novas classes
  Alteração no código
  Adicionar a Pizza Portuguesa e Frango com Catupiry
  Retirar a Pizza Mista do cardápio
  Solução
  Retirar a criação de objetos do método pedirPizza()
if (sabor.equals("muzzarela")) {
pizza = new PizzaMuzzarela();
} else if (sabor.equals("calabresa")) {
pizza = new PizzaCalabresa();
} else if (sabor.equals("mista")) {
pizza = new PizzaMista();
}
public Pizza pedirPizza(String sabor) {
Pizza pizza = new Pizza();
pizza.preparar();
pizza.assar();
pizza.cortar();
pizza.embalar();
return pizza;
}
Retira-se o código de criação
da Pizza
Criando uma Fábrica
  Objetos que cuidam dos detalhes da criação
de objetos
  Qualquer criação de objeto é pedido a Fábrica
  O único interesse do cliente é que receba um
objeto do tipo que pediu
O objeto Fábrica Simples
public class FabricaSimplesDePizza {
public Pizza criarPizza(String sabor) {
Pizza pizza = null;
if (sabor.equals("muzzarela")) {
pizza = new PizzaMuzzarela();
} else if (sabor.equals("calabresa")) {
pizza = new PizzaCalabresa();
} else if (sabor.equals("mista")) {
pizza = new PizzaMista();
}
return pizza;
}
}
Qual a vantagem afinal?
  Um objeto fábrica pode ter muitos clientes
  Pode haver outros métodos
  1 local apenas para ser modificado
A Pizzaria refatorada
public class Pizzaria {
FabricaSimplesDePizza fabrica;
Pizzaria(FabricaSimplesDePizza fabrica) {
this.fabrica = fabrica;
}
public Pizza pedirPizza(String sabor) {
Pizza pizza;
pizza = fabrica.criarPizza(sabor);
pizza.preparar();
pizza.assar();
pizza.cortar();
pizza.embalar();
return pizza;
}
}
Onde está o new()????
Fábrica Simples - Padrões de Projeto

Mais conteúdo relacionado

Destaque

G gpcwmlguth 02.009.030.004-video_dvr_-_internet
G gpcwmlguth 02.009.030.004-video_dvr_-_internetG gpcwmlguth 02.009.030.004-video_dvr_-_internet
G gpcwmlguth 02.009.030.004-video_dvr_-_internetMessias Castro
 
Evolução de software 1 - Engenharia de Software
Evolução de software 1 - Engenharia de SoftwareEvolução de software 1 - Engenharia de Software
Evolução de software 1 - Engenharia de SoftwareEduardo Mendes
 
Desenvolvimento agil de_software
Desenvolvimento agil de_softwareDesenvolvimento agil de_software
Desenvolvimento agil de_softwareEduardo Mendes
 
Academia do Arquiteto Globalcode
Academia do Arquiteto GlobalcodeAcademia do Arquiteto Globalcode
Academia do Arquiteto GlobalcodeGlobalcode
 
TDD Projeto e Estrategias
TDD Projeto e EstrategiasTDD Projeto e Estrategias
TDD Projeto e EstrategiasEduardo Mendes
 
The Power of Collaboration to Build Your Own Startup
The Power of Collaboration to Build Your Own StartupThe Power of Collaboration to Build Your Own Startup
The Power of Collaboration to Build Your Own StartupTaufan Erfiyanto
 
Desenvolvimento web com PHP parte 4
Desenvolvimento web com PHP parte 4Desenvolvimento web com PHP parte 4
Desenvolvimento web com PHP parte 4Eduardo Mendes
 
Introdução à Linguagem Ruby - Fundamentos - Parte 2
 Introdução à Linguagem Ruby - Fundamentos - Parte 2 Introdução à Linguagem Ruby - Fundamentos - Parte 2
Introdução à Linguagem Ruby - Fundamentos - Parte 2Eduardo Mendes
 
Acesso a banco de dados com JDBC
Acesso a banco de dados com JDBCAcesso a banco de dados com JDBC
Acesso a banco de dados com JDBCEduardo Mendes
 
Desenvolvimento web com PHP parte 3
Desenvolvimento web com PHP parte 3Desenvolvimento web com PHP parte 3
Desenvolvimento web com PHP parte 3Eduardo Mendes
 
Evolucao de software - parte 1
Evolucao de software - parte 1Evolucao de software - parte 1
Evolucao de software - parte 1Eduardo Mendes
 

Destaque (20)

G gpcwmlguth 02.009.030.004-video_dvr_-_internet
G gpcwmlguth 02.009.030.004-video_dvr_-_internetG gpcwmlguth 02.009.030.004-video_dvr_-_internet
G gpcwmlguth 02.009.030.004-video_dvr_-_internet
 
# Dvr stand alone maxstand 2 em 1
# Dvr stand alone maxstand 2 em 1# Dvr stand alone maxstand 2 em 1
# Dvr stand alone maxstand 2 em 1
 
Evolução de software 1 - Engenharia de Software
Evolução de software 1 - Engenharia de SoftwareEvolução de software 1 - Engenharia de Software
Evolução de software 1 - Engenharia de Software
 
Apostila `profissional cftv
Apostila `profissional cftvApostila `profissional cftv
Apostila `profissional cftv
 
Guia do cftv básico
Guia do cftv   básicoGuia do cftv   básico
Guia do cftv básico
 
Html Aula 1 Parte 1
Html  Aula 1 Parte 1Html  Aula 1 Parte 1
Html Aula 1 Parte 1
 
Desenvolvimento agil de_software
Desenvolvimento agil de_softwareDesenvolvimento agil de_software
Desenvolvimento agil de_software
 
Html - Aula 4
Html - Aula 4Html - Aula 4
Html - Aula 4
 
Padrão Adapter
Padrão AdapterPadrão Adapter
Padrão Adapter
 
Html Aula 1 - parte 2
Html Aula 1 - parte 2Html Aula 1 - parte 2
Html Aula 1 - parte 2
 
Academia do Arquiteto Globalcode
Academia do Arquiteto GlobalcodeAcademia do Arquiteto Globalcode
Academia do Arquiteto Globalcode
 
Jquery
JqueryJquery
Jquery
 
TDD Projeto e Estrategias
TDD Projeto e EstrategiasTDD Projeto e Estrategias
TDD Projeto e Estrategias
 
The Power of Collaboration to Build Your Own Startup
The Power of Collaboration to Build Your Own StartupThe Power of Collaboration to Build Your Own Startup
The Power of Collaboration to Build Your Own Startup
 
Desenvolvimento web com PHP parte 4
Desenvolvimento web com PHP parte 4Desenvolvimento web com PHP parte 4
Desenvolvimento web com PHP parte 4
 
Introdução à Linguagem Ruby - Fundamentos - Parte 2
 Introdução à Linguagem Ruby - Fundamentos - Parte 2 Introdução à Linguagem Ruby - Fundamentos - Parte 2
Introdução à Linguagem Ruby - Fundamentos - Parte 2
 
Acesso a banco de dados com JDBC
Acesso a banco de dados com JDBCAcesso a banco de dados com JDBC
Acesso a banco de dados com JDBC
 
Desenvolvimento web com PHP parte 3
Desenvolvimento web com PHP parte 3Desenvolvimento web com PHP parte 3
Desenvolvimento web com PHP parte 3
 
Evolucao de software - parte 1
Evolucao de software - parte 1Evolucao de software - parte 1
Evolucao de software - parte 1
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 

Mais de Eduardo Mendes

JavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a ObjetosJavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a ObjetosEduardo Mendes
 
Angular JS - Fundamentos
Angular JS - FundamentosAngular JS - Fundamentos
Angular JS - FundamentosEduardo Mendes
 
Singleton - Padrão de Projeto
Singleton - Padrão de ProjetoSingleton - Padrão de Projeto
Singleton - Padrão de ProjetoEduardo Mendes
 
Introdução à Internet, Http e HTML
Introdução à Internet, Http e HTMLIntrodução à Internet, Http e HTML
Introdução à Internet, Http e HTMLEduardo Mendes
 
Estimativas de Esforço - Engenharia de Software
Estimativas de Esforço - Engenharia de SoftwareEstimativas de Esforço - Engenharia de Software
Estimativas de Esforço - Engenharia de SoftwareEduardo Mendes
 
Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2Eduardo Mendes
 
Validações no Ruby on Rails
Validações no Ruby on Rails Validações no Ruby on Rails
Validações no Ruby on Rails Eduardo Mendes
 
Padroes Template-Method (Método Gabarito)
Padroes Template-Method (Método Gabarito)Padroes Template-Method (Método Gabarito)
Padroes Template-Method (Método Gabarito)Eduardo Mendes
 
PHP básico para iniciantes
PHP básico para iniciantesPHP básico para iniciantes
PHP básico para iniciantesEduardo Mendes
 
PHP e MySQL para iniciantes
PHP e MySQL para iniciantesPHP e MySQL para iniciantes
PHP e MySQL para iniciantesEduardo Mendes
 
Introdução a Padrões de Projeto
Introdução a Padrões de ProjetoIntrodução a Padrões de Projeto
Introdução a Padrões de ProjetoEduardo Mendes
 
Strategy - Padrões de Projeto
Strategy - Padrões de ProjetoStrategy - Padrões de Projeto
Strategy - Padrões de ProjetoEduardo Mendes
 

Mais de Eduardo Mendes (20)

JavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a ObjetosJavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a Objetos
 
AngularJS - Rotas
AngularJS - RotasAngularJS - Rotas
AngularJS - Rotas
 
Angular JS - Fundamentos
Angular JS - FundamentosAngular JS - Fundamentos
Angular JS - Fundamentos
 
Singleton - Padrão de Projeto
Singleton - Padrão de ProjetoSingleton - Padrão de Projeto
Singleton - Padrão de Projeto
 
Layout Fluido
Layout FluidoLayout Fluido
Layout Fluido
 
Web Design Responsivo
Web Design ResponsivoWeb Design Responsivo
Web Design Responsivo
 
Introdução à Internet, Http e HTML
Introdução à Internet, Http e HTMLIntrodução à Internet, Http e HTML
Introdução à Internet, Http e HTML
 
ExtJS-4
ExtJS-4ExtJS-4
ExtJS-4
 
Jquery 2
Jquery 2Jquery 2
Jquery 2
 
Estimativas de Esforço - Engenharia de Software
Estimativas de Esforço - Engenharia de SoftwareEstimativas de Esforço - Engenharia de Software
Estimativas de Esforço - Engenharia de Software
 
Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2
 
Validações no Ruby on Rails
Validações no Ruby on Rails Validações no Ruby on Rails
Validações no Ruby on Rails
 
Padrão Iterator
Padrão IteratorPadrão Iterator
Padrão Iterator
 
Padroes Template-Method (Método Gabarito)
Padroes Template-Method (Método Gabarito)Padroes Template-Method (Método Gabarito)
Padroes Template-Method (Método Gabarito)
 
Padrão Fachada
Padrão FachadaPadrão Fachada
Padrão Fachada
 
Web Design Responsivo
Web Design ResponsivoWeb Design Responsivo
Web Design Responsivo
 
PHP básico para iniciantes
PHP básico para iniciantesPHP básico para iniciantes
PHP básico para iniciantes
 
PHP e MySQL para iniciantes
PHP e MySQL para iniciantesPHP e MySQL para iniciantes
PHP e MySQL para iniciantes
 
Introdução a Padrões de Projeto
Introdução a Padrões de ProjetoIntrodução a Padrões de Projeto
Introdução a Padrões de Projeto
 
Strategy - Padrões de Projeto
Strategy - Padrões de ProjetoStrategy - Padrões de Projeto
Strategy - Padrões de Projeto
 

Último

Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfNatalia Granato
 

Último (6)

Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 

Fábrica Simples - Padrões de Projeto

  • 3. Programar para Interface Relembrando o Strategy   Como definir as variáveis de instância do comportamento? public class PatoSelvagem extends Pato { public PatoSelvagem() { modoDeVoar = new VoarComAsas(); modoDeGrasnar = new Quack(); } }
  • 4. Com classes concretas relacionadas Pato pato; if (situacao1) { pato = new PatoSelvagem(); } else if (situacao2) { pato = new PatoDeBorracha(); } else if (situacao3) { pato = new PatoCabecaVermelha(); }
  • 5. Quais os riscos?   Mudanças   Criação de novas classes concretas apesar do polimorfismo   Como encapsular do resto do aplicativo as partes que instanciam classes concretas?
  • 6. “Identificando os aspectos que variam” public Pizza pedirPizza() { Pizza pizza = new Pizza(); pizza.preparar(); pizza.assar(); pizza.cortar(); pizza.embalar(); return pizza; } Precisamos mais que 1 Pizza
  • 7. Determinando o sabor da Pizza public Pizza pedirPizza(String sabor) { Pizza pizza = new Pizza(); if (sabor.equals("muzzarela")) { pizza = new PizzaMuzzarela(); } else if (sabor.equals("calabresa")) { pizza = new PizzaCalabresa(); } else if (sabor.equals("mista")) { pizza = new PizzaMista(); } pizza.preparar(); pizza.assar(); pizza.cortar(); pizza.embalar(); return pizza; }
  • 8. Novas classes   Alteração no código   Adicionar a Pizza Portuguesa e Frango com Catupiry   Retirar a Pizza Mista do cardápio   Solução   Retirar a criação de objetos do método pedirPizza()
  • 9. if (sabor.equals("muzzarela")) { pizza = new PizzaMuzzarela(); } else if (sabor.equals("calabresa")) { pizza = new PizzaCalabresa(); } else if (sabor.equals("mista")) { pizza = new PizzaMista(); } public Pizza pedirPizza(String sabor) { Pizza pizza = new Pizza(); pizza.preparar(); pizza.assar(); pizza.cortar(); pizza.embalar(); return pizza; } Retira-se o código de criação da Pizza
  • 10. Criando uma Fábrica   Objetos que cuidam dos detalhes da criação de objetos   Qualquer criação de objeto é pedido a Fábrica   O único interesse do cliente é que receba um objeto do tipo que pediu
  • 11. O objeto Fábrica Simples public class FabricaSimplesDePizza { public Pizza criarPizza(String sabor) { Pizza pizza = null; if (sabor.equals("muzzarela")) { pizza = new PizzaMuzzarela(); } else if (sabor.equals("calabresa")) { pizza = new PizzaCalabresa(); } else if (sabor.equals("mista")) { pizza = new PizzaMista(); } return pizza; } }
  • 12. Qual a vantagem afinal?   Um objeto fábrica pode ter muitos clientes   Pode haver outros métodos   1 local apenas para ser modificado
  • 13. A Pizzaria refatorada public class Pizzaria { FabricaSimplesDePizza fabrica; Pizzaria(FabricaSimplesDePizza fabrica) { this.fabrica = fabrica; } public Pizza pedirPizza(String sabor) { Pizza pizza; pizza = fabrica.criarPizza(sabor); pizza.preparar(); pizza.assar(); pizza.cortar(); pizza.embalar(); return pizza; } } Onde está o new()????