Прототип – бұл бағдарламалық жасақтамада қолданылатын жасалым үлгісі. Объектілерді прототип арқылы көшіру арқылы жасауға мүмкіндік береді, шығындарды азайтады.
Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
Прототиптік үлгі – бағдарламалық жасақтаманы әзірлеудегі жасалымдық дизайн үлгісі. Жаңа нысандарды жасау үшін қандай нысандардың типтері құрылатыны прототиптік мысал арқылы анықталатын жағдайларда қолданылады, ол жаңа нысандарды жасау үшін көшіріледі. Бұл үлгі клиенттік қолданбада нысан жасаушының кіші кластарын болдырмау үшін, мысалы, фабрикалық әдіс үлгісі сияқты, және берілген қолданба үшін тым қымбат болған жағдайда жаңа нысанды стандартты тәсілмен жасаудың (мысалы, «жаңа» кілт сөзін пайдалану) туындайтын шығындарынан аулақ болу үшін қолданылады. Үлгіні іске асыру үшін клиент таза виртуалды көшіру әдісін анықтайтын абстрактілі базалық класты жариялайды. «Полиморфты конструктор» мүмкіндігі қажет болатын кез келген класс абстрактілі базалық кластан туындайды және көшіру операциясын іске асырады. Клиент «жаңа» операторын қатты кодталған класс атымен шақыратын кодты жазудың орнына, прототипте көшіру әдісін шақырады, қажетті нақты туынды класс белгілейтін параметрмен фабрикалық әдісті шақырады немесе көшіру әдісін басқа дизайн үлгісімен ұсынылған механизм арқылы шақырады. Клетканың митоздық бөлінуі – нәтижесінде екі бірдей клетка пайда болады – өзін-өзі көшіруде белсенді рөл атқаратын прототиптің мысалы және осылайша Прототиптік үлгіні көрсетеді. Клетка бөлінген кезде екі бірдей генотипке ие клетка пайда болады. Басқаша айтқанда, клетка өзін-өзі көшіреді.
The prototype pattern is a creational design pattern in software development. It is used when the types of objects to create is determined by a prototypical instance, which is cloned to produce new objects. This pattern is used to avoid subclasses of an object creator in the client application, like the factory method pattern does, and to avoid the inherent cost of creating a new object in the standard way (e. g., using the 'new' keyword) when it is prohibitively expensive for a given application. To implement the pattern, the client declares an abstract base class that specifies a pure virtual clone method. Any class that needs a "polymorphic constructor" capability derives itself from the abstract base class, and implements the clone operation. The client, instead of writing code that invokes the "new" operator on a hard coded class name, calls the clone method on the prototype, calls a factory method with a parameter designating the particular concrete derived class desired, or invokes the clone method through some mechanism provided by another design pattern. The mitotic division of a cell — resulting in two identical cells — is an example of a prototype that plays an active role in copying itself and thus, demonstrates the Prototype pattern. When a cell splits, two cells of identical genotype result. In other words, the cell clones itself.
Үлгілік ереже
Кейде жасалым үлгілері бір-бірімен тоғысады – кейбір жағдайларда прототип немесе абстрактілі фабрика қолдануға болады. Басқа жағдайларда олар бір-бірін толықтырады: абстрактілі фабрика өнім объектілерін клондап қайтаратын прототиптер жиынтығын сақтай алады. Абстрактілі фабрика, құрылысшы және прототип өз іске асыруларында синглтонды пайдалана алады. Абстрактілі фабрика кластары көбінесе фабрикалық әдістермен (мұрагерлік арқылы жасау) іске асырылады, бірақ оларды прототипті (делегация арқылы жасау) пайдалану арқылы да іске асыруға болады. Көбінесе дизайн фабрикалық әдіспен басталады (кем қиындықтар, көбірек бейімделуге болады, кіші сыныптар көбейеді) және дизайнерге көбірек икемділік қажет екені анықталғанда абстрактілі фабрика, прототип немесе құрылысшыға (икемдірек, күрделірек) қарай дамиды. Прототипке кіші сыныптар қажет емес, бірақ ол «бастамалау» операциясын қажет етеді. Фабрикалық әдіс кіші сыныптарды талап етеді, бірақ бастамалауды талап етпейді. Композициялық және декоратор үлгілерін көп пайдаланатын дизайн прототиптен де пайда көре алады. Бағдарламалаудағы жалпы ереже бойынша, бастапқы объектіні дәл бейнелеу үшін орындалу кезінде дубликат объектіні жасағанда клон әдісін пайдалану ұсынылады. Бұл процеске объектіні клондау дейді, ол клондалған объектіге ұқсас атрибуттары бар жаңа объектіні тудырады. Балама ретінде, жаңа кілт сөзді пайдаланып класты құру әдепкі атрибут мәндері бар объектіні жасайды. Мысалы, банк шот операцияларын басқару жүйесін жобалау кезінде, бастапқы деректерді сақтай отырып, операцияларды жүргізу үшін шот туралы ақпаратты қамтитын объектіні көшіру қажет болуы мүмкін. Мұндай жағдайларда, жаңа объектіні құру үшін new пайдаланудың орнына клон әдісін қолдану дұрыс.
Sometimes creational patterns overlap—there are cases when either prototype or abstract factory would be appropriate. At other times, they complement each other: abstract factory might store a set of prototypes from which to clone and return product objects. Abstract factory, builder, and prototype can use singleton in their implementations. Abstract factory classes are often implemented with factory methods (creation through inheritance), but they can be implemented using prototype (creation through delegation). Often, designs start out using Factory Method (less complicated, more customizable, subclasses proliferate) and evolve toward abstract factory, prototype, or builder (more flexible, more complex) as the designer discovers where more flexibility is needed. Prototype does not require subclassing, but it does require an "initialize" operation. Factory method requires subclassing, but does not require initialization. Designs that make heavy use of the composite and decorator patterns often can benefit from Prototype as well. A general guideline in programming suggests using the clone method when creating a duplicate object during runtime to ensure it accurately reflects the original object. This process, known as object cloning, produces a new object with identical attributes to the one being cloned. Alternatively, instantiating a class using the new keyword generates an object with default attribute values. For instance, in the context of designing a system for managing bank account transactions, it may be necessary to duplicate the object containing account information to conduct transactions while preserving the original data. In such scenarios, employing the clone method is preferable over using new to instantiate a new object.
C++ үлгісі
C++ Аннотацияларында дизайн үлгісінің талқысы және полиморфты сынып дизайнын қолдана отырып, толық мысал келтірілген.
Discussion of the design pattern along with a complete illustrative example implementation using polymorphic class design are provided in the C++ Annotations.