---
name: "corelinux_Builder"
section: "3"
platform: "linux"
package: "libcorelinux-dev"
version: "0.4.32-5"
release: "Debian 3.1 (Sarge)"
platforms: ["linux"]
url: "https://new.carta.tech/corelinux_Builder"
---

# corelinux\_Builder(3)

Builder seperates the construction of a complex object from its representation so that the same construction process can create different representations.

## NAME

corelinux::Builder - **Builder** seperates the construction of a complex object from its representation so that the same construction process can create different representations.

## SYNOPSIS

`#include <Builder.hpp>`

### Public Member Functions

**Builder** (**AbstractFactory**\< UniqueId \> \*aAbstractFactory)  throw ( Assertion )\
 *Default constructor requires a abstract factory for building the product parts.*  **Builder** (const  **Builder** &aBuilder)  throw ( Assertion )\
 *Copy constructor creates a new instance of the reference abstract factory.*  virtual **~Builder** (void)\
 *Virtual destructor.*  **Builder** & **operator=** (const  **Builder** &aRef)\
 *Operation assignment.*  bool **operator==** (const  **Builder** &aRef)\
 *Equality operator.*  virtual ProductImpl \* **getCurrentProduct** (void) const \
 *Retrieves the current product.*  virtual CountCref **getProductCreates** (void) const \
 *Retrieve the product create counts.*  virtual CountCref **getProductDestroys** (void) const \
 *Retrieve the product destroy counts.*  virtual **AbstractFactory**\< UniqueId \> \* **getFactory** (void) const \
 *Retrieve the* **AbstractFactory***.*  virtual ProductImpl \* **create** (void)\
 *Default create routine invokes the implementation createProduct method.*  virtual void **destroy** (ProductImpl \*aPtr)\
 *Default destroy routine invokes the implementation destroyProduct method.*

### Protected Member Functions

**Builder** (void)  throw (Assertion)\
 *Default constructor not supported.*  void **incrementCreates** (void)\
 *Increment the creates.*  void **incrementDestroys** (void)\
 *Increment the destroys.*  virtual ProductImpl \* **createProduct** (void) const =0\
 *Pure virtual createProduct.*  virtual void **destroyProduct** (ProductImpl \*) const =0\
 *Pure virtual destroyProduct.*

### Protected Attributes

ProductImpl \* **theCurrentProduct**\
 *The product that was most recently built.*  **AbstractFactory**\< UniqueId \> \* **theFactory**\
 *The factory for creating parts.*  Count **theProductCreates**\
 *The count of creates.*  Count **theProductDestroys**\
 *The count of destroys.*

## Detailed Description

### template\<class ProductImpl, class UniqueId\> class corelinux::Builder\< ProductImpl, UniqueId \>

**Builder** seperates the construction of a complex object from its representation so that the same construction process can create different representations.

This differs from **AbstractFactory** in that the Factory creates parts and **Builder** creates Products (assembled parts).

**See also:**

**AbstractFactory**, **Allocator**, **AbstractAllocator**

## Constructor & Destructor Documentation

### template\<class ProductImpl, class UniqueId\> corelinux::Builder\< ProductImpl, UniqueId \>::Builder (AbstractFactory\< UniqueId \> \* aAbstractFactory) throw ( Assertion )` [inline]`

Default constructor requires a abstract factory for building the product parts. **Parameters:**

*AbstractFactory* .RE

### template\<class ProductImpl, class UniqueId\> corelinux::Builder\< ProductImpl, UniqueId \>::Builder (const Builder\< ProductImpl, UniqueId \> & aBuilder) throw ( Assertion )` [inline]`

Copy constructor creates a new instance of the reference abstract factory. **Parameters:**

*Builder* const reference

## Member Function Documentation

### template\<class ProductImpl, class UniqueId\> virtual ProductImpl\* corelinux::Builder\< ProductImpl, UniqueId \>::create (void)` [inline, virtual]`

Default create routine invokes the implementation createProduct method. **Returns:**

ProductImpl pointer

### template\<class ProductImpl, class UniqueId\> virtual void corelinux::Builder\< ProductImpl, UniqueId \>::destroy (ProductImpl \* aPtr)` [inline, virtual]`

Default destroy routine invokes the implementation destroyProduct method. **Parameters:**

*ProductImpl* pointer

### template\<class ProductImpl, class UniqueId\> virtual ProductImpl\* corelinux::Builder\< ProductImpl, UniqueId \>::getCurrentProduct (void) const` [inline, virtual]`

Retrieves the current product. **Returns:**

ProductImpl pointer

### template\<class ProductImpl, class UniqueId\> Builder& corelinux::Builder\< ProductImpl, UniqueId \>::operator= (const Builder\< ProductImpl, UniqueId \> & aRef)` [inline]`

Operation assignment. Uses the same factory as the reference after destroying theCurrentProduct.

**Parameters:**

*Builder* const reference

**Returns:**

**Builder** reference

### template\<class ProductImpl, class UniqueId\> bool corelinux::Builder\< ProductImpl, UniqueId \>::operator== (const Builder\< ProductImpl, UniqueId \> & aRef)` [inline]`

Equality operator. **Parameters:**

*Builder* const reference

**Returns:**

bool - true if same **Builder** instance

## Author

Generated automatically by Doxygen for CoreLinux++ from the source code.
