Кіріспе

Прототиптік үлгі – бағдарламалық жасақтаманы әзірлеудегі жасалымдық дизайн үлгісі. Жаңа нысандарды жасау үшін қандай нысандардың типтері құрылатыны прототиптік мысал арқылы анықталатын жағдайларда қолданылады, ол жаңа нысандарды жасау үшін көшіріледі. Бұл үлгі клиенттік қолданбада нысан жасаушының кіші кластарын болдырмау үшін, мысалы, фабрикалық әдіс үлгісі сияқты, және берілген қолданба үшін тым қымбат болған жағдайда жаңа нысанды стандартты тәсілмен жасаудың (мысалы, «жаңа» кілт сөзін пайдалану) туындайтын шығындарынан аулақ болу үшін қолданылады. Үлгіні іске асыру үшін клиент таза виртуалды көшіру әдісін анықтайтын абстрактілі базалық класты жариялайды. «Полиморфты конструктор» мүмкіндігі қажет болатын кез келген класс абстрактілі базалық кластан туындайды және көшіру операциясын іске асырады. Клиент «жаңа» операторын қатты кодталған класс атымен шақыратын кодты жазудың орнына, прототипте көшіру әдісін шақырады, қажетті нақты туынды класс белгілейтін параметрмен фабрикалық әдісті шақырады немесе көшіру әдісін басқа дизайн үлгісімен ұсынылған механизм арқылы шақырады. Клетканың митоздық бөлінуі – нәтижесінде екі бірдей клетка пайда болады – өзін-өзі көшіруде белсенді рөл атқаратын прототиптің мысалы және осылайша Прототиптік үлгіні көрсетеді. Клетка бөлінген кезде екі бірдей генотипке ие клетка пайда болады. Басқаша айтқанда, клетка өзін-өзі көшіреді.

Үлгілік ереже

Кейде жасалым үлгілері бір-бірімен тоғысады – кейбір жағдайларда прототип немесе абстрактілі фабрика қолдануға болады. Басқа жағдайларда олар бір-бірін толықтырады: абстрактілі фабрика өнім объектілерін клондап қайтаратын прототиптер жиынтығын сақтай алады. Абстрактілі фабрика, құрылысшы және прототип өз іске асыруларында синглтонды пайдалана алады. Абстрактілі фабрика кластары көбінесе фабрикалық әдістермен (мұрагерлік арқылы жасау) іске асырылады, бірақ оларды прототипті (делегация арқылы жасау) пайдалану арқылы да іске асыруға болады. Көбінесе дизайн фабрикалық әдіспен басталады (кем қиындықтар, көбірек бейімделуге болады, кіші сыныптар көбейеді) және дизайнерге көбірек икемділік қажет екені анықталғанда абстрактілі фабрика, прототип немесе құрылысшыға (икемдірек, күрделірек) қарай дамиды. Прототипке кіші сыныптар қажет емес, бірақ ол «бастамалау» операциясын қажет етеді. Фабрикалық әдіс кіші сыныптарды талап етеді, бірақ бастамалауды талап етпейді. Композициялық және декоратор үлгілерін көп пайдаланатын дизайн прототиптен де пайда көре алады. Бағдарламалаудағы жалпы ереже бойынша, бастапқы объектіні дәл бейнелеу үшін орындалу кезінде дубликат объектіні жасағанда клон әдісін пайдалану ұсынылады. Бұл процеске объектіні клондау дейді, ол клондалған объектіге ұқсас атрибуттары бар жаңа объектіні тудырады. Балама ретінде, жаңа кілт сөзді пайдаланып класты құру әдепкі атрибут мәндері бар объектіні жасайды. Мысалы, банк шот операцияларын басқару жүйесін жобалау кезінде, бастапқы деректерді сақтай отырып, операцияларды жүргізу үшін шот туралы ақпаратты қамтитын объектіні көшіру қажет болуы мүмкін. Мұндай жағдайларда, жаңа объектіні құру үшін new пайдаланудың орнына клон әдісін қолдану дұрыс.

C++ үлгісі

C++ Аннотацияларында дизайн үлгісінің талқысы және полиморфты сынып дизайнын қолдана отырып, толық мысал келтірілген.