| Last change
 on this file since 0e5675 was             8dd38e, checked in by Frederik Heber <heber@…>, 15 years ago | 
        
          | 
New patterns ManipulableClone and ManipulablePrototypeFactory, changed PrototypeFactory.
 ManipulableClone is a Clone that can spawn a manipulated copy varied by given
parameters.
prototypes in PrototypeFactory cannot be manipulated anymore.
PrototypeFactory::getPrototypeManipulator() -> getPrototype() and returned
reference is const (and a ref, no pointer. Preventing its accidental
deletion).
ManipulablePrototypeFactory then has non-const references returned by
getProduct().
ManipulablePrototypeFactory::manipulatePrototype() allows direct manipulation
of the prototype by a given parameter set.
Added unit tests for the new patterns.
Changed unit tests for PrototypeFactory.
Library version is now 4:0:0, API version is 1.0.7.
 | 
        
          | 
              
Property                 mode
 set to                 100644 | 
        
          | File size:
            1.3 KB | 
      
      
| Rev | Line |  | 
|---|
| [1afcbe] | 1 | /* | 
|---|
|  | 2 | * Clone.hpp | 
|---|
|  | 3 | * | 
|---|
|  | 4 | *  Created on: Jan 4, 2011 | 
|---|
|  | 5 | *      Author: heber | 
|---|
|  | 6 | */ | 
|---|
|  | 7 |  | 
|---|
|  | 8 | #ifndef CLONE_HPP_ | 
|---|
|  | 9 | #define CLONE_HPP_ | 
|---|
|  | 10 |  | 
|---|
|  | 11 | /**  \section <Clone> (Clone Howto) | 
|---|
|  | 12 | * | 
|---|
|  | 13 | * Prototypes serves as templates in object creation, i.e. new objects are | 
|---|
|  | 14 | * created by coping the prototype. Therefore each prototypical type has to | 
|---|
|  | 15 | * implement a clone() function. | 
|---|
|  | 16 | * | 
|---|
|  | 17 | * By inheriting this pattern and implementing the clone function you make | 
|---|
|  | 18 | * sure that the prototypes, e.g. to be stored in a factory table, can be | 
|---|
|  | 19 | * safely copied (the factory just calls clone of the prototype) and can | 
|---|
|  | 20 | * be handed out by the abstract and common interface. | 
|---|
|  | 21 | * | 
|---|
|  | 22 | * <h2> Howto </h2. | 
|---|
|  | 23 | * | 
|---|
|  | 24 | * Basically, you if you have your Prototype types, e.g. \a Prototype1 that | 
|---|
|  | 25 | * all have a common interface, \a IPrototype, you just inherit additionally | 
|---|
|  | 26 | * the specific Clone<IPrototype> class as follows: | 
|---|
|  | 27 | * | 
|---|
|  | 28 | * @code | 
|---|
|  | 29 | * class Prototype1 : | 
|---|
|  | 30 | *   public IPrototype, | 
|---|
|  | 31 | *   public Clone<IPrototype> | 
|---|
|  | 32 | * { | 
|---|
|  | 33 | * public: | 
|---|
|  | 34 | *   IPrototype clone() | 
|---|
|  | 35 | *   { | 
|---|
|  | 36 | *     ... do something to clone the class ... | 
|---|
|  | 37 | *   }; | 
|---|
|  | 38 | * }; | 
|---|
|  | 39 | * @endcode | 
|---|
|  | 40 | * | 
|---|
| [8dd38e] | 41 | * \link <ManipulableClone> {See also at ManipulableClones if changes to the | 
|---|
|  | 42 | * prototype instance can only be accomplished through its constructor. } | 
|---|
|  | 43 | * | 
|---|
| [1afcbe] | 44 | */ | 
|---|
|  | 45 | template <class interface> | 
|---|
|  | 46 | class Clone | 
|---|
|  | 47 | { | 
|---|
|  | 48 | public: | 
|---|
|  | 49 | virtual ~Clone() {}; | 
|---|
|  | 50 | virtual interface* clone() const = 0; | 
|---|
|  | 51 | }; | 
|---|
|  | 52 |  | 
|---|
|  | 53 | #endif /* CLONE_HPP_ */ | 
|---|
       
      
  Note:
 See   
TracBrowser
 for help on using the repository browser.