Adapter(适配器)模式

简介:

1. 意图

将一个类的接口转换成客户希望的另外一个接口. 解决接口不兼容问题.

2. 别名

包装器 Wrapper

4. 适用性

想使用一个已经存在的类. 而它的接口不符合你的要求.


5. 结构

 

6. 参与者

Target
    ----客户需要的接口.
Adaptee
    ----已经存在的一个接口.这个接口需要适配.
Adapter
    ----对Adaptee和Target接口进行适配.



在这里加入我们有一个接口:
class IRunnable
{
public:
    IRunnable(){;}
    virtual ~IRunnable(){;}

    virtual void run() = 0;
}
;
一般来说,这个接口是用于线程上的。
比如:
IRunnable r;
Thread thr;
thr.Start(&r);

线程的入口函数会运行IRunnable::run()方法。
在这里,我们要被线程运行就必须要从IRunnable这个接口继承下来,可是,现在我有一个类它本来是没有被设计为为多线程的,所以,我没有从IRunnable继承下来。可是现在,我需要它支持多线程,而且我已经不能让它从IRunnable继承下来了,或者是我不想修改它,这又如何是好呢?
这时候,我们就需要一个适配器了!

template < class C>
class RunnableAdapter:  public IRunnable
{
public:
    typedef void (C::*Callback)();
    
    RunnableAdapter(C& object, Callback method): _pObject(&object), _method(method)
    {
    }

    
    RunnableAdapter(const RunnableAdapter& ra): _pObject(ra._pObject), _method(ra._method)
    {
    }


    ~RunnableAdapter()
    {
    }


    RunnableAdapter& operator = (const RunnableAdapter& ra)
    {
        _pObject = ra._pObject;
        _method  = ra._method;
        return *this;
    }


    void run()
    {
        (_pObject->*_method)();
    }

    
private:
    RunnableAdapter();

    C*       _pObject;
    Callback _method;
}
;

上面便是IRunnable的适配器。

现在好了,我们可以让不是从Runnable继承下来的类支持多线程了:
RunnableAdapter<MyClass> ra(myObject, &MyObject::doSomething));

Thread thr;
thr.Start(ra);
Hmmm,现在一切都OK了!
目录
相关文章
|
5月前
|
XML 前端开发 Java
24. 【Android教程】适配器 Adapter
24. 【Android教程】适配器 Adapter
105 3
适配器的作用
适配器的作用
165 0
|
Java Android开发
Adroid RecyclerView adapter 封装
Adroid RecyclerView adapter 封装
|
算法 C++
C++函数适配器
C++函数适配器
|
API
适配器(Adapter)模式
适配器(Adapter)模式
152 0
|
XML SQL 前端开发
Adapter基础讲解
这一节我们要讲的UI控件都是跟Adapter(适配器)打交道的,了解并学会使用Adapter很重要, Adapter是用来帮助填充数据的中间桥梁,简单来说就是:将各种数据以合适的形式显示到view上,提供 给用户看!
454 0
|
前端开发 开发者 索引
less-adapter |学习笔记
快速学习 less-adapter
154 0
less-adapter |学习笔记
适配器模式(Adapter)
一 概述 定义:适配器模式将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper)。
917 0