[note] The «!product» stereotype on a Property variable typed by an Interface indicates that a concrete implementation Class is supplied for it by a factory.

From OoeBridge:

  /**
   *
   * @var \Drupal\ooe\Block\IBlock
   */
  private $block_demo;
 
  /**
   *
   * @return \Drupal\ooe\Block\IBlock
   *   Lazily creates a demo block.
   */
  protected function block_demo() {
    if (empty($this->block_demo)) {
      $this->block_demo = $this->factory()->newBlock(
          $this->getModule() . "_block_demo", $this->getModuleDisplayName() . ': Demo block');
      $this->block_demo
          ->setCache(BlockCacheKind::CACHE_PER_ROLE)
          ->setRegion($this->region_sidebar_1st())
          ->setStatus(BlockStatusKind::ENABLED);
    }
    return $this->block_demo;
  }

ooe-mduml-usage-from-Factory-products.pn

For an explanation please read: MagicDraw UML: does not permit drawing a Dependency (or Usage) from a Property name symbol or line end of an Association, makes it hard to indicate a chosen implementation Class. Workaround: draw from Property symbol in composite structure compartment..

Note applies to ...
Visit also