适配器模式
将一个类的接口,转换为另一个接口,使不能一起工作的类可以一起工作。
往往用于两个已有的系统中间交互。
假设A/B两个已经投运的系统,A需要使用B的服务,但B提供的服务接口,
与A所能使用的接口不匹配,那么就需要在A和B之间构建一个适配器,
将B提供的接口转换为A所能使用的接口。
A -> Adapter -> B
// A系统只能使用DataService接口
class SystemA {
DataService _datasvc;
void do() {
__datasvc.getData();
}
};
// B所能提供的接口(requestData)与A所能使用的(getData)不匹配。
class SystemB {
Data requestData() {}
};
// 构建一个适配器接口,将SystemB提供的接口转为A能使用的DataService
class SysBAdapter : DataService {
SystemB _sysb;
Data getData() {
return _sysb.requestData();
}
};
main (){
SystemA asys = new SystemA;
asys._datasvc = new SysBAdapter;
asys.do();
}
桥接模式
对象的抽象和实现,使用相互独立的体系进行分离,使其各自可独立变化和具体化。
// 文件操作抽象类, 文件创建由FileImpl接口实现,而FileImpl用于是不同文件系统的文件操作实现。
class File {
FileImpl _impl;
void open(string name) {
_impl.openFile(name);
}
}
// 两种类型的文件
class BinaryFile : File {}
class TextFile: File {}
interface FileImpl {
void openFile(string name);
}
// UNIX平台文件操作类
class UnixFileImpl : FileImpl {
void openFile(string name) {
open(name...);
}
}
// windows平台文件操作
class WinFileImpl : FileImpl {
void openFile(string name) {
CreateFile(...);
}
}