Фабричен модел в C++

Fabricen Model V C



Factory Pattern е начин за създаване на обекти в разработката на софтуер, без да се налага да знаете конкретни подробности за това как са създадени. Той предоставя опростен интерфейс за създаване на обекти, като скрие сложната логика на създаване зад фабричен клас. Той принадлежи към категорията шаблони за проектиране, които се отнасят до механизмите за създаване на обекти. Тази статия обхваща фабрични модели в C++.

Въведение във фабричния модел

Шаблонът за проектиране е метод за решаване на повтарящи се проблеми в софтуерния дизайн. Фабричният шаблон е един от дизайнерските шаблони, които помагат да се създават обекти по гъвкав и отделен начин.

Factory Pattern е шаблон за създаване на дизайн в C++, който позволява създаване на обект без изрично познаване на класа на обекта. Той предоставя начин за капсулиране на сложна логика за създаване на обект в отделен фабричен клас. Това става чрез дефиниране на общ интерфейс за създаване на обекти, където специфичният клас на обекта се определя по време на изпълнение.







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



Защо да използвате Factory Pattern?

Има няколко причини, поради които може да искаме да използваме фабричния модел. Една от причините е, че позволява отделяне на код от конкретни класове. Използвайки фабричен метод, можем лесно да сменим един клас с друг, без да се налага да променяме друг код и да го направим по-ефективен.



Друга причина да използвате фабричния шаблон е, че може да направи кода по-тестваем. Фабричните модели ни позволяват да тестваме код чрез създаване на фалшиви обекти.





Ето някои от още причини, поради които фабричният модел се използва в C++:

  • Моделът Factory Method се използва, когато даден клас не знае предварително какви обекти трябва да създаде.
  • Моделът се използва, когато даден клас разчита на своите подкласове, за да определи обектите, които създава.
  • Полезно е, когато искате да капсулирате логиката за създаване на сложен обект на едно място.

Пример за фабричен шаблон в C++

В C++ можем да имплементираме фабричния модел, като дефинираме абстрактен базов клас с виртуален фабричен метод. Този метод трябва да върне указател към желания клас. След това можем да извлечем конкретни класове от този базов клас и да заменим фабричния метод, за да върнем екземпляр на подходящия клас.



Ето пример за това как можем да използваме тази реализация на фабричния модел:

#include

използване на пространство от имена std ;

клас Shape {

публичен :

виртуален невалиден рисувам ( ) = 0 ;

статичен Форма * createShape ( вътр Тип ) ;

} ;

клас Кръг : обществена форма {

публичен :

невалиден рисувам ( ) {

cout << „Рисуване на кръг“. << endl ;

}

} ;

клас Правоъгълник : обществена форма {

публичен :

невалиден рисувам ( ) {

cout << „Рисуване на правоъгълник“. << endl ;

}

} ;

Форма * Форма :: createShape ( вътр Тип ) {

ако ( Тип == 1 ) {
връщане нов кръг ( ) ;
} друго ако ( Тип == 2 ) {
връщане нов правоъгълник ( ) ;
} друго {
връщане nullptr ;
}
}


вътр основен ( ) {

Форма * кръг = Форма :: createShape ( 1 ) ;

кръг -> рисувам ( ) ;

Форма * правоъгълник = Форма :: createShape ( 2 ) ;

правоъгълник -> рисувам ( ) ;

връщане 0 ;

}

В този пример имаме клас Shape с два производни класа: Circle и Rectangle. Класът Shape има чиста виртуална функция draw(), която се изпълнява от производните класове. Класът Shape също има статична функция createShape(int type), която действа като фабричен метод за създаване на екземпляри на производните класове въз основа на посочения тип. Функцията draw() се извиква върху създадените обекти, за да демонстрира тяхното специфично поведение.

  Картина, съдържаща текст, шрифт, екранна снимка Описание, генерирано автоматично

Заключение

Factory Pattern е шаблон за създаване на дизайн в C++, който позволява създаване на обект без изрично познаване на класа на обекта. Той предоставя опростен интерфейс за създаване на обекти, като скрие сложната логика на създаване зад фабричен клас. Това става чрез дефиниране на общ интерфейс за създаване на обекти, където специфичният клас на обекта се определя по време на изпълнение. Прочетете повече за фабричните модели в тази статия.