Layering & Contract Philosophy With additional indirection

Design Pattern ->Adaptor

Design Pattern ->Adaptor

Adaptee object just is as a member. Adaptee object just relies on Adapter object.

class CAdaptee
{
      public: void theExistingAndIncompatibleMethod(){ … } ;
}
class CTarget
{
     public: virtual void theNewMethod() = 0;
}

class CAdapter: public CTarget, CAdaptee
{
    public: void theNewMethod()
        { 
              this->theExistingAndIncompatibleMethod(); 
        };
}

class CAdapter: public CTarget
{
   public: void theNewMethod() 
   { 
       CAdaptee object;    
       object.theExistingAndIncompatibleMethod();
    };
}
class client
{
    public: void operation() 
       { 
       CTarget *pTarget = new CAdapter; pTarget->theNewMethod();}
}

 


Applicability

Use the Adapter pattern when

  • you want to use an existing class having a incompatible method with the new interface from the one you want to use, and its interface does not match the one you need. You want to create a reusable class that cooperates with unrelated or unforeseen classes, that is, classes that don't necessarily have compatible interfaces.
  • (object adapter only) you need to use several existing subclasses, but it's impractical to adapt their interface by subclassing/making as subclass every one. An object adapter can adapt the interface of its parent class.

Participants

  • Target (Shape): defines the domain-specific interface that Client uses.
  • Client (DrawingEditor): collaborates with objects conforming to the Target interface.
  • Adaptee (TextView): defines an existing interface that needs adapting.
  • Adapter (TextShape): adapt the interface of Adaptee to the Target interface.

Collaborations

  • Clients call operations on an Adapter instance. In turn, the adapter calls Adaptee operations that carry out the request.
 

 

相关文章:

  • 2022-01-03
  • 2021-12-20
  • 2021-06-13
  • 2022-01-17
  • 2021-07-04
  • 2021-11-18
  • 2021-07-19
猜你喜欢
  • 2021-09-14
  • 2021-06-20
  • 2021-12-04
  • 2021-07-14
  • 2022-01-01
  • 2021-07-15
  • 2021-11-13
相关资源
相似解决方案