>  기사  >  백엔드 개발  >  PHP 팩토리 메소드 설계 패턴 사례에 대한 자세한 설명

PHP 팩토리 메소드 설계 패턴 사례에 대한 자세한 설명

php中世界最好的语言
php中世界最好的语言원래의
2018-05-16 14:13:331188검색

이번에는 PHP 팩토리 메소드 디자인 패턴 사례에 대해 자세히 설명을 들고왔는데, PHP 팩토리 메소드 디자인 패턴 사례를 사용할 때 주의사항 은 무엇인지, 다음은 실제 사례로 살펴보겠습니다.

1. 팩토리 메소드 패턴이란

창의적인 디자인 패턴으로 팩토리 메소드 패턴은 "무언가"를 만들어 내는 것입니다. 팩토리 메소드를 사용하면 생성되는 "사물"이 제품이고, 제품과 이를 생성한 클래스 사이에는 바인딩이 없습니다. 실제로 이러한 느슨한 결합을 유지하기 위해 클라이언트는 공장을 통해 요청한 다음 요청한 제품을 생성합니다. 팩토리 메소드 패턴을 사용하면 요청자는 실제로 제품을 생성하지 않고 요청만 합니다.

2. 팩토리 메소드 패턴을 사용해야 하는 경우

인스턴스화된 객체의 하위 클래스가 변경될 수 있는 경우 팩토리 메소드 패턴을 사용해야 합니다.

3. 일반 팩토리 메소드 패턴

일반 팩토리 메소드 패턴을 사용하는 경우 클라이언트는 팩토리에 대한 참조만 포함하고 하나의 팩토리는 하나의 제품을 생산합니다. 제품을 추가할 때 새 팩토리 클래스와 새 제품 클래스를 추가해야 합니다.

<?php
/**
*  一般工厂方法设计模式
**/
//工厂抽象类
abstract class Factory
{
  protected abstract function produce();
  public function startFactory()
  {
    $pro = $this->produce();
    return $pro;
  }
}
//文本工厂
class TextFactory extends Factory
{
  protected function produce()
  {
    $textProduct = new TextProduct();
    return $textProduct->getProperties();
  }
}
//图像工厂
class ImageFactory extends Factory
{
  protected function produce()
  {
    $imageProduct = new ImageProduct();
    return $imageProduct->getProperties();
  }
}
//产品类接口
interface Product
{
  public function getProperties();
}
//文本产品
class TextProduct implements Product
{
  private $text;
  function getProperties()
  {
    $this->text = "此处为文本";
    return $this->text;
  }
}
//图像产品
class ImageProduct implements Product
{
  private $image;
  function getProperties()
  {
    $this->image = "此处为图像";
    return $this->image;
  }
}
//客户类
class Client
{
  private $textFactory;
  private $imageFactory;
  public function construct()
  {
    $this->textFactory = new TextFactory();
    echo $this->textFactory->startFactory() . &#39;<br />&#39;;
    $this->imageFactory = new ImageFactory();
    echo $this->imageFactory->startFactory() . &#39;<br />&#39;;
  }
}
$client = new Client();
/*运行结果:
此处为文本
此处为图像
*/
?>

4. 파라메트릭 팩토리 메소드 패턴

파라미터화된 팩토리 메소드 패턴을 사용하는 경우 고객이 요청할 때 제품 유형을 지정해야 합니다. . 제품을 추가할 때 새로운 제품 카테고리만 추가하면 됩니다.

<?php
/**
*  参数化工厂方法设计模式
**/
//工厂抽象类
abstract class Factory
{
  protected abstract function produce(Product $product);
  public function startFactory(Product $product)
  {
    $pro = $this->produce($product);
    return $pro;
  }
}
//工厂实现
class ConcreteFactory extends Factory
{
  protected function produce(Product $product)
  {
    return $product->getProperties();
  }
}
//产品类接口
interface Product
{
  public function getProperties();
}
//文本产品
class TextProduct implements Product
{
  private $text;
  public function getProperties()
  {
    $this->text = "此处为文本";
    return $this->text;
  }
}
//图像产品
class ImageProduct implements Product
{
  private $image;
  public function getProperties()
  {
    $this->image = "此处为图像";
    return $this->image;
  }
}
//客户类
class Client
{
  private $factory;
  private $textProduct;
  private $imageProduct;
  public function construct()
  {
    $factory = new ConcreteFactory();
    $textProduct = new TextProduct();
    $imageProduct = new ImageProduct();
    echo $factory->startFactory($textProduct) . &#39;<br />&#39;;
    echo $factory->startFactory($imageProduct) . &#39;<br />&#39;;
  }
}
$client = new Client();
/*运行结果:
此处为文本
此处为图像
*/
?>

이 기사의 사례를 읽으신 후 방법을 마스터하셨다고 생각합니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트의 다른 관련 기사를 주목하세요!

추천 도서:

PHP는 이미지 공유 기능을 구현합니다

PHP 싱글턴 모드 사용 사례에 대한 자세한 설명

위 내용은 PHP 팩토리 메소드 설계 패턴 사례에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.