zoukankan      html  css  js  c++  java
  • Design Pattern ->Adaptor

    Layering & Contract Philosophy With additional indirection

    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.
     
  • 相关阅读:
    Windows 服务程序(一)
    API---注册表编程
    API---文件操作
    main(argc, char *argv[])
    C 自删除技术---批处理方式
    分治法排序
    TDD尝试:nodejs单元测试
    尝试create tech team
    Yum重装走过的坑
    求生欲很强的数据库
  • 原文地址:https://www.cnblogs.com/iiiDragon/p/3268444.html
Copyright © 2011-2022 走看看