<MyRusakov.ru />

Программирование на C++ с Нуля до Гуру

Программирование на C++ с Нуля до Гуру

Данный курс научит Вас программировать на языке C++, который, несмотря на свой почтенный возраст, необычайно сильно востребован. Курс состоит из 6 разделов, посмотрев которые и выполнив все упражнения, Вы с нуля освоите этот язык и сможете создавать самые разные проекты любой сложности на C++.

Для закрепления материала из уроков к ним идёт множество упражнений.

Дополнительно к курсу идёт вспомогательная система, которая не даст Вам забросить начатое на полпути.

Также вместе с курсов Вы получаете Бонус "Программирование на C++ в Unreal Engine", в котором Вы научитесь создавать игры на C++ с использованием этого движка.

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Зачем Вы изучаете программирование/создание сайтов?

Шаблон проектирования абстрактная фабрика на PHP

Шаблон проектирования абстрактная фабрика на PHP

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

Абстрактная фабрика - это порождающий шаблон проектирования, который позволяет создавать семейства связанных объектов без указания их конкретных классов.

Но данное определение мало информативно, поэтому покажу сразу код, попутно комментируя непонятные участки.

<?php


// общий интерфейс для всех телефонов
interface Phone {
    function call(); // звонок
}


// конкретная реализация телефона
class IPhone implements Phone 
{
    function call() {
        print("Iphone::call звонит..." . PHP_EOL);
    }
}

// конкретная реализация телефона
class Android implements Phone 
{
    function call() {
       print("Android::call звонит..." . PHP_EOL);
    }
}
 

// интерфейс всех телевизоров
interface TV 
{
    function getBrand() : string; // возвращает производителя
}


// конкретная реализация телевизора
class SmartTV implements TV 
{
    function getBrand() : string 
    {
        return "Производитель телевизора: ООО \"Новый Кинескоп\"". PHP_EOL;
    }
}


// конкретная реализация телевизора
class SimpleTV implements TV 
{
    function getBrand() : string {
        return "Производитель телевизора: ЗАО \"Совхоз@Net\"" . PHP_EOL;
    }
}
 

// абстрактная фабрика устройств, где производятся как телевизоры так и телефоны
abstract class ProductFactory 
{
    abstract function getTV(string $tvType) : ?TV;          // возвращает фабрику для TV
    abstract function getPhone(string $phoneType) : ?Phone; // возвращает фабрику для Phone
}


// фабрика для телефонов
class PhoneFactory extends ProductFactory 
{
    function getPhone(string $phoneType) : ?Phone
    {
        if($phoneType == null) {
            return null;
        }

        return new $phoneType(); // эта особенность PHP позволяет обойтись без условных конструкций
        // создаем объект на основе переданного строкового представления класса
    }

    // этот метод не нужен для данного объекта, поэтому возвращаем null
    function getTV(string $tvType) : ?TV {
        return null;
    }
}

// тоже самое, что и предыдущий класс
class TVFactory extends ProductFactory 
{
    function getTV(string $tvType) : ?TV
    {
        if($tvType == null) {
            return null;
        }

        return new $tvType();
    }

    function getPhone(string $phoneType) : ?PHone {
        return null;
    }
}


// фабрика по производству фабрик
// тоже самое, что и обычная фабрика, с той лишь разницей, что создает другие фабрики
// возвращая объект, реализующий интерфейс абстрактной фабрики
class FactoryProducer 
{
    public static function getFactory(string $productType) : ProductFactory 
    {
        return new $productType();
    }
}



class Program 
{
    public static function main() {
 
        //получаем объект фабрики телефонов
        $phoneFactory = FactoryProducer::getFactory("PhoneFactory");

        // IPhone
        $iphone = $phoneFactory->getPhone("IPhone");
        $iphone->call();

        // Android
        $android = $phoneFactory->getPhone("Android");
        $android->call();

        // фабрика по производству телевизоров
        $tvFactory = FactoryProducer::getFactory("TVFactory");

        // SmartTV
        $tv = $tvFactory->getTV("SmartTV");
        print $tv->getBrand();

        // SimpleTV
        $tv = $tvFactory->getTV("SimpleTV");
        print $tv->getBrand();
    }
 }

 Program::main();

Таким образом, одна абстрактная фабрика порождает другие фабрики, которые уже непосредственно занимаются созданием конкретных объектов. При этом абстрактная фабрика в PHP просто содержит в себе набор абстрактных методов для создания объектов каждого типа.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.