ホームページ  >  記事  >  バックエンド開発  >  PHPファクトリーメソッドのデザインパターン事例を詳しく解説

PHPファクトリーメソッドのデザインパターン事例を詳しく解説

php中世界最好的语言
php中世界最好的语言オリジナル
2018-05-16 14:13:331186ブラウズ

今回は、PHPファクトリーメソッドデザインパターンのケースについて詳しく説明します。PHPファクトリーメソッドデザインパターンを使用する際の注意点は何ですか。以下は実践的なケースです。見てみましょう。

1. ファクトリメソッドパターンとは

ファクトリメソッドパターンは、クリエイティブなデザインパターンとして、「何か」を作り出すことです。ファクトリ メソッドでは、作成される「もの」は製品であり、製品とそれを作成したクラスとの間に拘束はありません。実際には、この疎結合を維持するために、クライアントはファクトリを通じてリクエストを行い、ファクトリがリクエストされた製品を作成します。ファクトリ メソッド パターンでは、要求者は実際にプロダクトを作成せずに要求を行うだけです。

2. ファクトリ メソッド パターンを使用する場合

インスタンス化されたオブジェクトのサブクラスが変更される可能性がある場合は、ファクトリ メソッド パターンを使用する必要があります。

3. 一般的なファクトリ メソッド パターン

一般的なファクトリ メソッド パターンを使用する場合、クライアントにはファクトリへの参照のみが含まれ、1 つのファクトリが 1 つの製品を生産します。製品を追加するときは、新しいファクトリ クラスと新しい製品クラスを追加する必要があります。

<?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 中国語 Web サイトの他の関連記事に注目してください。

推奨読書:

PHPは写真を共有する機能を作成します

PHPシングルトンモードの使用例の詳細な説明

以上がPHPファクトリーメソッドのデザインパターン事例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。