Кіріспе

Объектіге бағытталған бағдарламалық жасақтама үлгісі. Объектіге бағытталған бағдарламалауда фабрикалық әдіс үлгісі – нақты класын көрсетпей объектілерді құру мәселесін шешу үшін фабрикалық әдістерді пайдаланатын жасалым үлгісі. Объектіні конструкторды шақырудың орнына, фабрикалық әдіс арқылы жасау арқылы жүзеге асырылады. Фабрикалық әдістер интерфейсте белгіленіп, туыс сыныптарда іске асырылуы мүмкін, немесе базалық сыныпта іске асырылып, қажет болған жағдайда туынды сыныптарда қайта жазылуы мүмкін.

Анықтама

Объект құру үшін интерфейсті анықтаңыз, бірақ субкластар қай класты инстанциялау керектігін шешсін. Factory әдісі кластың пайдаланатын инстанциялауын субкластарға жүктеуге мүмкіндік береді. (Gang Of Four)

Объектіні құру көбінесе құрастырушы объектінің ішіне қосуға орынсыз болатын күрделі процестерді қажет етеді. Объектіні құру кодтың маңызды қайталануына, құрастырушы объектіге қолжетімді емес ақпаратты қажет етуге, жеткілікті абстракция деңгейін қамтамасыз етпеуге немесе құрастырушы объектінің негізгі міндеттеріне жатпауына әкелуі мүмкін. Зауыт әдісі үлгісі осы мәселелерді объектілерді құру үшін жеке әдіс арқылы шешеді, оны субкластар жасалатын өнімнің нақты түрін анықтау үшін қайта жасай алады. Зауыт әдісі үлгісі мұрагерлікке сүйенеді, себебі объектіні құру кіші сыныптарға тапсырылады, олар зауыт әдісін іске асырып объектілерді құрады. Төмендегі C# мысалында көрсетілгендей, зауыт әдісі үлгісі интерфейске де сүйене алады, мысалы IPerson интерфейсін іске асыру қажет.

Құрылымы

Бөлме – түпкілікті өнімнің (MagicRoom немесе OrdinaryRoom) негізгі класы. MazeGame осындай негізгі өнімді жасау үшін абстрактілі фабрикалық әдісті жариялайды. MagicRoom және OrdinaryRoom – түпкілікті өнімді құрастыратын негізгі өнімнің кіші кластары. MagicMazeGame және OrdinaryMazeGame – MazeGame-нің түпкілікті өнімдерді жасаушы фабрикалық әдісті іске асыратын кіші кластары. Осылайша, фабрикалық әдістер шақырушыларды (MazeGame) нақты кластардың іске асырылуынан тәуелсіз етеді. Бұл "жаңа" операторды қажетсіз етеді, Ашық/жабық принципін сақтауға мүмкіндік береді және түпкілікті өнімді өзгерістерге бейімдейді.

Қолданылуы

ADO.NET-те IDbCommand.CreateParameter – параллель сынып иерархияларын байланыстыру үшін фабрикалық әдісті қолданудың мысалы. Qt-да QMainWindow::createPopupMenu – қолданба кодінде қайта жазылатын фабрикалық әдіс. Java-да javax.xml.parsers пакетінде бірнеше фабрикалар қолданылады, мысалы javax.xml.parsers.DocumentBuilderFactory немесе javax.xml.parsers.SAXParserFactory. HTML5 DOM API-де Document интерфейсі HTMLElement интерфейсінің нақты элементтерін жасау үшін createElement фабрикалық әдісін қамтиды.