Примеры порождающих паттернов из Банды четырёх (GoF) на Delphi

Вольный перевод статьи Gang-of-Four Creational Design Pattern Examples in Delphi

Специализированная для Delphi версия Порождающих паттернов из книги “Design Patterns: Elements of Reusable Object-Oriented Software”.

Абстрактная фабрика (Abstract Factory)

Абстрактная фабрика это класс который создаёт компонент и возвращает его в виде базового (абстрактного) типа. Потребитель (код который использует фабрику) не видит реализацию ни фабрики, ни объектов которые она производит, а работает только с базовыми типами.

В этом примере используются интерфейсы вместо абстрактных классов, которые используются в примерах в книге. Любое количество конкретных классов могут реализовывать интерфейс фабрики.

Сборщик (Builder)

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

Фабричный метод (Factory Method)

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

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

Одиночка (Singleton)

Я редко реализую этот паттерн и предпочитаю чистый абстрактный класс с классовыми свойствами и методами. Этот паттерн особенно сложно реализуется в Delphi потому, что всегда есть конструктор унаследованный от TObject. Так что не получается реализовать паттерн, так как описано в книге. Единственный путь - спрятать конструктор и предоставлять интерфейс вместо класса.

Прототип (Prototype)

Это мой любимый паттерн. Для его использования передавайте экземпляры прототипов в конструктор. Затем используйте их для создания клонов в фабрике. Такой подход предоставляет возможности для расширения, когда у вас нет доступа до кода (похоже на плагины или расширения определяемые пользователем).

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

2 thoughts on “Примеры порождающих паттернов из Банды четырёх (GoF) на Delphi”

  1. про Singleton… Можно использовать такой вариант, ничего сложно в реализации:
    type
    TSingletone = class sealed(TObject)
    strict private class var
    FSingletone: TSingletone;
    class destructor Destroy;
    public
    class function NewInstance: TObject; override;
    public
    MyField: string;
    end;

    { TSingletone }

    class destructor TSingletone.Destroy;
    begin
    FreeAndNil(FSingletone);
    end;

    class function TSingletone.NewInstance: TObject;
    begin
    if FSingletone = nil then
    FSingletone := TSingletone(inherited NewInstance);
    Result := FSingletone;
    end;
    и дальше можно сколько угодно использовать
    var
    ASingletone: TSingletone;
    begin
    ASingletone := TSingletone.Create;

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *