适配器模式 有时候也称包装样式或者包装。将一个类的接口转接成用户所期待的。一个适配使得因接口不兼容而不能在一起工作的类工作在一起,做法是将类别自己的接口包裹在一个已存在的类中。
有两类适配器模式:
·对象适配器模式 - 在这种适配器模式中,适配器容纳一个它我包裹的类的实例。在这种情况下,适配器调用被包裹对象的物理实体。
·类适配器模式 - 这种适配器模式下,适配器继承自已实现的类(一般多重继承)。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();
}
}
外观模式 与 适配器模式 的区别在于,适配器是为了使得一个已经存在的类在逻辑上成为另外一种类;而外观模式只是为了将逻辑相同,但是底层细节不同的接口转化为统一的接口,起语义逻辑不变。