Evgenii Legotckoi
Evgenii LegotckoiSept. 19, 2018, 10:27 a.m.

Generative Design Patterns - Prototype

Goals

  • Specify the types of objects to create using the prototype instance and create new objects by copying this prototype.
  • Create one instance of the class to use as the source for all future instances.
  • The new operator is considered harmful

Problems

An application is hard-wired to an object's class when using the new operator.


Discussion

Declare an abstract base class that defines a pure virtual method "clone" and maintains a dictionary of all "cloned" concrete derived classes. Any class that needs the "polymorphic constructor" capability: derives from an abstract base class, registers its prototypical instance, and implements the clone() operation.

The client then, instead of writing code that calls the new operator on the derived class name, invokes the "clone" operation on the abstract base class, providing a string or numbered data type that denotes the particular derived class desired.

Structure

The Factory knows how to find the right prototype, and each Class knows how to spawn new instances of itself.

Example

The Prototype template specifies the type of objects created using the prototype. Prototypes of new products are often built before full production, but in this example the prototype is passive and does not participate in copying. Mitotic cell division resulting in two identical cells is an example of a prototype that plays an active role in copying and thus exhibits a prototype pattern. When a cell splits, two identical genotype cells appear. In other words, the cell clones itself.

Control List

  1. Add "clone" method to existing class hierarchy
  2. Create a "registry" that maintains a cache of prototype objects. The registry can be encapsulated in a new Factory class or in a base class.
  3. Create a factory method that: may (or may not) take arguments, find the correct prototype object, call clone() on that object, and return the result.
  4. The client replaces all calls to the new operator with calls to the factory method.

Rules of thumb

  • Sometimes the creation patterns are competitors: there are times when you can use Prototype or Abstract Factory. In other cases, they complement each other: An Abstract Factory can store a set of prototypes from which objects can be cloned and returned. Abstract Factory, Builder and Prototype can use Singleton in their implementations.
  • Abstract Factory classes are often implemented using Factory Methods, but they can be implemented using Prototype.
  • Factory method: creation through inheritance. Prototype: creation via delegation.
  • Often projects start with Factory Method (less complex, customizable, subclasses proliferate) and evolve towards Abstract Factory, Prototype, or Builder (more flexible, more complex) as the developer finds more flexibility is needed.
  • The prototype does not require subclasses, but it does require an "initialize" operation. A factory method requires subclassing but does not require initialization.
  • Constructs that often use the Composite and Decorator patterns can often also use Prototype.
  • The prototype creates one instance of the class to be used as the creator of all future instances.
  • Prototypes are useful when object initialization is expensive and you expect minor changes to initialization parameters. In this context, Prototype can avoid costly "building from scratch" and support cheap cloning of a pre-initialized prototype.
  • Prototype is unique among other creation patterns because it doesn't require a class - just an object. Object-oriented languages such as Self and Omega, which do away with classes, rely entirely on prototypes to create new objects.
We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.

Do you like it? Share on social networks!

Comments

Only authorized users can post comments.
Please, Log in or Sign up
AD

C ++ - Test 004. Pointers, Arrays and Loops

  • Result:50points,
  • Rating points-4
m

C ++ - Test 004. Pointers, Arrays and Loops

  • Result:80points,
  • Rating points4
m

C ++ - Test 004. Pointers, Arrays and Loops

  • Result:20points,
  • Rating points-10
Last comments
i
innorwallNov. 15, 2024, 1:27 p.m.
Release of C++/Qt and QML application deployment utility CQtDeployer v1.4.0 (Binary Box) optionally substituted alkoxy, optionally substituted alkenyloxy, optionally substituted alkynyloxy, optionally substituted aryloxy, OCH, OC H, OC H, OC H, OC H, OC H, OC H, O C CH, OCH CH OH, O…
i
innorwallNov. 15, 2024, 8:26 a.m.
Qt/C++ - Lesson 031. QCustomPlot – The build of charts with time buy generic priligy We can just chat, and we will not lose too much time anyway
i
innorwallNov. 15, 2024, 6:03 a.m.
Qt/C++ - Lesson 060. Configuring the appearance of the application in runtime I didnt have an issue work colors priligy dapoxetine 60mg revia cost uk August 3, 2022 Reply
i
innorwallNov. 14, 2024, 11:07 p.m.
Circuit switching and packet data transmission networks Angioedema 1 priligy dapoxetine
i
innorwallNov. 14, 2024, 10:42 p.m.
How to Copy Files in Linux If only females relatives with DZ offspring were considered these percentages were 23 order priligy online uk
Now discuss on the forum
i
innorwallNov. 14, 2024, 2:39 p.m.
добавить qlineseries в функции priligy amazon canada 93 GREB1 protein GREB1 AB011147 6
i
innorwallNov. 11, 2024, 9:55 p.m.
Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
9
9AnonimOct. 25, 2024, 7:10 p.m.
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

Follow us in social networks