팩토리 메소드 com PHP
4274 단어 webdevphpcodenewbieprogramming
Este é mais um padrão de projeto do GOF, onde programamos voltados a interface, deixando a responsabilidade de implementação especificos para cada objeto specific.
Um exemplo prático seria definirmos tipos de pagamentos, existem infinitos tipos e formas de realizarmos um pagamento, mas podemos resumi-los a alguns itens em comum:
Todo pagamento tem um valor, a moeda(달러, 레알), juros, 소포 등. Poderiamos ter então uma PagamentoProduct com esses métodos, e cada forma de pagamento deverá implementar esses métodos e definir suas regras.
A 'programação voltada a interface'é muito utilizado em Golang, onde para podermos testar os objetos, precisamos primeiro de uma interface que modele o comportamento do mesmo.
CarroProduct.php:
<?php
namespace FactoryMethod\Product;
// Todos os subprodutos de um carro, precisam implementar os métodos desta interface
interface CarroProduct
{
public function acelerar(): void;
public function frear(): void;
public function trocarMarcha(): void;
}
Dentro deste arquivo, para diminuir o número de arquivos, eu criei 2 class diferentes que implementam nossa interface: TeslaModel e Fusca. Este dois são nossos objetos 'concretos' que implementam o modelo(인터페이스).
// Concrete product, ou seja, um objeto concreto que implementa a interface
class TeslaModel implements CarroProduct
{
public function acelerar(): void
{
echo "Tesla acelerando\n";
}
public function frear(): void
{
echo "Tesla freando\n";
}
public function trocarMarcha(): void
{
echo "Tesla trocando marcha";
}
}
// Concrete product, ou seja, um objeto concreto que implementa a interface
class Fusca implements CarroProduct
{
public function acelerar(): void
{
echo "Fusca acelerando\n";
}
public function frear(): void
{
echo "Fusca freando\n";
}
public function trocarMarcha(): void
{
echo "Fusca trocando marcha";
}
}
우리는 인터페이스 외부의 크리에이터를 제어할 수 있는 문제가 없는 객체를 제어하기 위해 인터페이스 응답을 정의하는 패브릭을 결정합니다.
CarroFactory.php:
<?php
use FactoryMethod\Product\CarroProduct;
// A carro factory, permite que a gente crie qualquer objeto concreto que implemente a interface CarroProduct
interface CarroFactory
{
public function criarCarro(string $modeloDoCarro) : CarroProduct;
}
CarroProduct 클래스에서 사용하는 비용은 공장(공장)에서 CarroProduct를 사용할 때 응답할 수 있는 유형이며 인터페이스를 구현하는 품질 클래스입니다.
광장, criaremos 2 클래스 FuscaFactory e TeslaFactory, que serão as class responsáveis por criar nosso Fusca e nosso Tesla.
<?php
use FactoryMethod\Product\CarroProduct;
use FactoryMethod\Product\Fusca;
class FuscaFactory implements CarroFactory
{
public function criarCarro(string $modeloDoCarro): CarroProduct
{
if ($modeloDoCarro == "fusca")
{
return new Fusca();
} else {
throw new Exception("Modelo de carro invalido!");
}
}
}
마지막으로 nosso 인덱스:
<?php
/**
*
* No padrão Factory Method, temos uma interface que define
*um contrato para os objetos a serem criados pelas fábricas, que
*seriam nossos produtos finais. Também temos uma interface que
*define como nossas classes-fábrica deverão ser construídas.
*
*
*/
$teslaFactory = new TeslaFactory();
$fuscaFactory = new FuscaFactory();
try
{
$teslas = $teslaFactory->criarCarro('modeloX');
}
catch(Exception $e)
{
echo $e->getMessage();
}
$teslas->acelerar();
$teslas->trocarMarcha();
$teslas->frear();
Resumidamente, o método fábrica é muito util quando precisamos criar vários objetos que terão comportamentos similares. Claro que aqui foi um exemplo não tão prático, mas por exemplo, se fosse uma montadora de automóveis real, Imagine quantos modelos de carro existem.
Reference
이 문제에 관하여(팩토리 메소드 com PHP), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/bbwithpointers/factory-method-com-php-34dn텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)