适配器模式 有时候也称包装样式或者包装。将一个的接口转接成用户所期待的。一个适配使得因接口不兼容而不能在一起工作的类工作在一起,做法是将类别自己的接口包裹在一个已存在的类中。

有两类适配器模式:

·对象适配器模式 - 在这种适配器模式中,适配器容纳一个它我包裹的类的实例。在这种情况下,适配器调用被包裹对象的物理实体。

·类适配器模式 - 这种适配器模式下,适配器继承自已实现的类(一般多重继承)。facade 为外部提供一致的界面,但不改动逻辑语义
 

图1:类模式适配器

图2:对象模式适配器



外观模式 为子系统中的一组接口提供一个统一的高层接口,使得子系统更容易使用。
在cocos2d-x中,SimpleAudioEngine是一个外观模式。它将不同平台的通用的音频操作整合为一致的接口。

来自维基百科的实现:http://zh.wikipedia.org/wiki/%E5%A4%96%E8%A7%80%E6%A8%A1%E5%BC%8F

class CPU {
public:
    void freeze() {  }
    void jump(long position) {  }
    void execute() {  }
}
 
class Memory {
public:
    void load(long position, char* data) {
        
    }
}
 
class HardDrive {
public:
    char* read(long lba, int size) {
        
    }
}
 
/* Façade */
 
class Computer {
public:
    void startComputer() {
        cpu.freeze();
        memory.load(BOOT_ADDRESS, hardDrive.read(BOOT_SECTOR, SECTOR_SIZE));
        cpu.jump(BOOT_ADDRESS);
        cpu.execute();
    }
}
 
/* Client */
 
class You {
public:
    void start(String[] args) {
        Computer facade = new Computer();
        facade.startComputer();
    }
}

外观模式 
与 适配器模式 的区别在于,适配器是为了使得一个已经存在的类在逻辑上成为另外一种类;而外观模式只是为了将逻辑相同,但是底层细节不同的接口转化为统一的接口,起语义逻辑不变。