프로토타입 패턴 em PHP
3773 단어 tutorialwebdevphpprogramming
Este padrão é indicado principalmente quando se quer criar
cópias exatas de um objeto, incluindo seus atributos. Assim, temos um custo muito menor de memória do que instanciar o mesmo objeto muitas vezes.
que uma livraria precisa 'assinar' o nome do comprador em cada capa de livro를 상상해보세요. Se fossemos por uma abordagem sem padrões, teriamos que instanciar um novo objeto a cada livro comprado, certo?
Todo esse 'esforço'computacional somente parar alterar uma propriedade do objeto.
Para isso, vamos utilizar o padrão Prototype que nos da uma solução muito mais leve para esse problema.
프로토타입: classe abstrata que define o contrato a ser 'clonado'
구체적인 유형: 프로토타입을 구체적으로 구현하는 클래스입니다.
클라이언트: class que fazem uso dos objetos.
_
LivroPrototype:
/**
* Livro Design Patterns PHP 7
* Pagina 73
* O objetivo desse padrão é definir alguns objetos que servem
*como uma instância de protótipo, clonada para a criação de novos
*objetos. Diferente dos demais padrões de criação, o Prototype
*utiliza o próprio objeto para criar as novas instâncias em vez de
*usar classes auxiliares para fazer isso.
*Este padrão é indicado principalmente quando se quer criar
*cópias exatas de um objeto, incluindo seus atributos. Assim, temos
*um custo muito menor de memória do que instanciar o mesmo
*objeto muitas vezes e, em cada uma dessas vezes, setar exatamente
*os mesmos valores em suas propriedades.
*/
namespace Prototype;
abstract class LivroPrototype
{
protected string $titulo;
// método mágico __clone() é chamaod quando clonamos uma classe com a palavra clone - de forma abstrata, a implementação deve ser feita nas subclasses
abstract public function __clone();
public function getTitulo(): string
{
return $this->titulo;
}
public function setTitulo(string $titulo) : LivroPrototype
{
$this->titulo = $titulo;
return $this;
}
}
Classe LivroPrototype은 새로운 프로토타입을 나타냅니다. 엘라
estende da classe abstrata LivroPrototype, herdando assim suas propriedades e métodos.
class LivroPhpPrototype extends LivroPrototype
{
public function __construct()
{
$this->setTitulo("Livro PHP");
}
public function __clone()
{
echo "Livro PHP Clonado\n";
}
}
Abaixo, o código dos clientes:
// CLIENTES
$compradores = ['Gabriel', 'Anderson', 'Bruno'];
$livroPhp = new LivroPhpPrototype();
$livroPhp->setTitulo("Padroes de projeto em PHP");
print_r($livroPhp);
// criando vários clones
$livros = [];
foreach($compradores as $nomeComprador)
{
$livroComprador = clone $livroPhp;
$livroComprador->setNome($nomeComprador);
$livros[] = $livroComprador;
}
print_r($livros);
com isso, a nossa livraria agora pode gerar centenas de livros com assinatura, consumindo muito menos memória que uma solução sem o prototype.
É 중요한 관찰자 que no ultimo 루프, estamos trabalhando semper com um clone do objeto já instanciado, motificando apenas o nome que seria 'assinado' no livro.
코드 저장소: https://github.com/bbwithpointers/design-patterns-php
Reference
이 문제에 관하여(프로토타입 패턴 em PHP), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/bbwithpointers/prototype-pattern-em-php-m4l텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)