Рубрики
Uncategorized

Пример анализа абстрактного фабричного шаблона в шаблоне проектирования PHP

Автор оригинала: David Wong.

В этой статье представлен абстрактный фабричный шаблон шаблона проектирования PHP. Чтобы поделиться с вами для вашей справки, следующим образом:

В предыдущей статье говорилось о простой фабрике (статической фабрике) и заводском режиме в PHP. Теперь давайте поговорим об абстрактном заводском режиме

Как мы уже говорили ранее, добавить продукт очень просто. Добавление соответствующих классов продуктов и фабрик не требует изменения исходного кода, который соответствует принципу открытия и закрытия

Теперь, в последней статье, у нас есть новое требование. Нам требуются яблочные и банановые напитки, бренды Pepsi и Coca-Cola, которые не могут быть реализованы с помощью заводской модели. Я могу добавить только один продукт, но я не могу добиться этого, добавив бренд, что приводит к абстрактной заводской модели. Код выглядит следующим образом

php
/**
 * Created by PhpStorm.
 * User: tiansi
 * Date: 18/1/23
 *Time: 5:10 PM
 */
//Factory interface
interface FruitFactory{
  //Production method of beverage
  function makeAppleFruit();
  function makeBananaFruit();
}
//Beverage interface
interface Fruit{
  function getFruitName();
}
class BaishiAppleFruit implements Fruit{
  function getFruitName()
  {
    Echo 'Pepsi apple drink';
  }
}
class BaishiBananaFruit implements Fruit{
  function getFruitName()
  {
    Echo 'Pepsi banana drink';
  }
}
class ColeiAppleFruit implements Fruit{
  function getFruitName()
  {
    Echo 'Coca Cola apple drink';
  }
}
class ColeBananaFruit implements Fruit{
  function getFruitName()
  {
    Echo 'Coca Cola banana drink';
  }
}
//Pepsi Beverage Factory
class BaishiFruitFactory implements FruitFactory{
  function makeAppleFruit()
  {
    //Production of Pepsi apple beverage
    return new BaishiAppleFruit();
  }
  function makeBananaFruit()
  {
    //Production of Pepsi banana beverage
    return new BaishiBananaFruit();
  }
}
//Coca Cola Beverage Factory
class ColeFruitFactory implements FruitFactory{
  function makeAppleFruit()
  {
    //Production of Coca Cola apple beverage
    return new ColeiAppleFruit();
  }
  function makeBananaFruit()
  {
    //Production of Coca Cola banana beverage
    return new ColeBananaFruit();
  }
}
$baishi_factory = new BaishiFruitFactory();
$baishi_factory->makeAppleFruit()->getFruitName();
echo "
"; $baishi_factory->makeBananaFruit()->getFruitName(); echo "
"; $cole_factory = new ColeFruitFactory(); $cole_factory->makeAppleFruit()->getFruitName(); echo "
"; $cole_factory->makeBananaFruit()->getFruitName();

Результат операции:

Пепси яблочный напиток Пепси банановый напиток со вкусом Кока-колы яблочный напиток Кока-Кола и банан

Теперь мы видим, что если мы хотим добавить другой бренд, нам нужно всего лишь написать другой заводской класс и соответствующий класс продукта, чтобы успешно добавить бренд без изменения исходного кода

Но сейчас очень сложно добавить один продукт. Вам нужно изменить класс фабрики, в чем разница между фабрикой и абстрактная фабрика

Фабричный шаблон предназначен для одного продукта, абстрактного класса продукта. Каждая фабрика может создать только один продукт. Он поддерживает расширение одного продукта, не поддерживает расширение семейств продуктов и нацелен на иерархию продуктов

Абстрактные фабрики нацелены на семейства продуктов, несколько абстрактных классов продуктов, каждая фабрика может создавать несколько продуктов, поддерживать расширенные семейства продуктов, не поддерживать расширенные отдельные продукты и стремиться к нескольким иерархиям продуктов

Для получения дополнительной информации о PHP вы можете ознакомиться со следующими разделами: Введение в объектно-ориентированное программирование PHP, навыки работы с массивами PHP, введение в базовый синтаксис PHP, краткое описание операций PHP и использования операторов, краткое описание использования строк PHP, введение в работу с базой данных PHP + MySQL и краткое описание общих навыков работы с базами данных PHP

Я надеюсь, что эта статья будет полезна для программирования на PHP.

Оригинал: “https://developpaper.com/an-example-analysis-of-abstract-factory-pattern-in-php-design-pattern/”