
Section: Factory Classes

As the name implies, the <uvm_factory> is used to manufacture (create) UVM objects
and components. Only one instance of the factory is present in a given
simulation.

User-defined object and component types are
registered with the factory via typedef or macro invocation, as explained in
<uvm_default_factory::Usage>. The factory
generates and stores lightweight proxies to the user-defined objects and components:
<uvm_object_registry #(T,Tname)> for objects and <uvm_component_registry #(T,Tname)>
for components.  Each proxy only knows how to create an instance of the object
or component it represents, and so is very efficient in terms of memory usage.

When the user requests a new object or component from the
factory (e.g. <uvm_factory::create_object_by_type>), the factory will determine
what type of object to create based on its configuration, then
ask that type's proxy to create an instance of the type, which is returned to
the user.

(see uvm_ref_factory.gif)

