Evgenii Legotckoi
Қыр. 18, 2018, 3:11 Т.Қ.

Мысал - Delphi-дегі абстрактілі фабрика

Мазмұны

Этот шаблон идеален там, где вы хотите изолировать свое приложение от реализации конкретных классов. Например, если вы хотите наложить VCL Delphi на общий уровень VCL для 16 и 32-битных приложений, вы можете начать с абстрактной фабрики в качестве базы.


Пример

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

TOAbstractFactory = class(TObject)
  public
    constructor Create;
    destructor Destroy; override;

    //abstract widget constructors
    function CreateSpeedButton(AOwner: TComponent): TSpeedButton; virtual; abstract;
    function CreateEdit(AOwner: TComponent): TEdit; virtual; abstract;
    function CreateLabel(AOwner: TComponent): TLabel; virtual; abstract;
  end;

TORedFactory и TOBlueFactory переопределяют абстрактный интерфейс для поддержки различных стилей виджетов.

TORedFactory = class(TOAbstractFactory)
  public
    //concrete widget constructors
    function CreateSpeedButton(AOwner: TComponent): TSpeedButton; override;
    function CreateEdit(AOwner: TComponent): TEdit; override;
    function CreateLabel(AOwner: TComponent): TLabel; override;
  end;

TOBlueFactory = class(TOAbstractFactory)
  public
    //concrete widget constructors
    function CreateSpeedButton(AOwner: TComponent): TSpeedButton; override;
    function CreateEdit(AOwner: TComponent): TEdit; override;
    function CreateLabel(AOwner: TComponent): TLabel; override;
  end;

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

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

Пікірлер

Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
Кіріңіз немесе Тіркеліңіз