Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

tocho

Organizar código

Recommended Posts

Fiz o exemplo da pizzaria:

<?php 

interface Pizza{

public function preparar();

public function assar();	

public function cobrar();

}


class pizzaCalabresa implements Pizza{

public function preparar(){
		echo '<br />molho, queijo, calabreza, cebola e tomate';
	}

public function assar(){
		echo '<br />15 minutos';	
	}		

public function cobrar(){
		echo '<br />R$ 12,00<br />';	
	}

}


class pizzaNapolitana implements Pizza{

public function preparar(){
		echo '<br />molho, presunto, queijo, tomate e oregano';
	}

public function assar(){
		echo '<br />19 minutos';	
	}		

public function cobrar(){
		echo '<br />R$ 18,00<br />';	
	}

}


class forno{

public function fabricar(Pizza $pizza){

		$pizza->preparar();
		$pizza->assar();
		$pizza->cobrar();

	}

}


$forno =  new forno();

$pizza =  new pizzaCalabresa();
$forno->fabricar($pizza);

$pizza =  new pizzaNapolitana();
$forno->fabricar($pizza);

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

AbstractFactory - creational pattern :seta: Fábrica Abstrata - padrão de criação.

Fabricar, verbo transitivo direto :seta: Quem fabrica, fabrica alguma coisa.

 

 

Estou começando a estudar mais profundamente GOF, to com dificuldades de compreender a diferença entre Abstract Factory e Factory Method. Alguém consegue ajudar com um exemplo simples? :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Excelente didática como sempre joão, eu poderia sugerir que você colocasse ao final de cada tópico abordado(comentado por você) o link para o tópico que contém os índices para aqueles q chegaram a um desses tópicos aleatóriamente, não vai ter tanta credibilidade qnto se você postar mas pra galera que quiser ter mais aulas com o mestre ae segue o link separado por assuntos http://forum.imasters.com.br/topic/402329-padroes-gof/, abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, eu tenho uma dúvida.

 

No exemplo da fábrica de chocolates, digamos que eu tenha uma única fábrica (Nestle por exemplo), que pede algum produto da neste no método comprar (pode ser barra de chocolate, bombom, sei lá). Uma vez que eu tenha a interface Produto, estará correto porque qualquer classe que implemente produto pode ser tratada. Teoricamente isto funcionaria:

 


$barra= new Barra(); $bombom = new Bombom(); $cliente->compra($barra); // saída: Comprei uma barra $cliente->compra($bombom); // saída: Comprei bombom.

 

Mas digamos que eu tenha uma tabela em algum BD com uma lista de vários tipos de produtos. Nesta tabela eu tenho um campo que mostra o tipo do produto, que corresponde com a classe dele.

 

Se eu preciso ler todos os meus produtos do BD, no código eu traria o resultado em um array de objetos Produto por exemplo. Na hora de eu instanciar meu produto, como ele pode ser de qualquer tipo, eu instancio ele como Produto (considerando Produto como uma classe não abstrata, ao invés de interface), ao invés de instanciar diretamente como barra ou bombom. Mas neste caso eu não conseguiria chamar o método comprar, porque apesar de ele aceitar a classe Produto, na hora de chamar o método eu preciso passar um produto concreto, e não um generalizado. Qual seria a melhor solução para esta situação? Fazer um case em cada item da tabela e instanciar de acordo com classe antes de jogar no array?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá a todos,

Gostei muito destes ensinamentos e estou tentando implementar estas classes em meus projetos, mas como sou iniciante em OO estou com uma seguinte dúvida, como ficaria a implementação destas classes utilizando além da criação do select, mas também insert e update? E se eu necessitasse de fazer consultas com sub-queries?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sabe quando dá aquele "estalo", tranco de como fazer bem feito os códigos, valeu por esse espírito João Batista Neto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.