首先放一张,让大家大致了解什么叫适配器。适配器属于接口隔离的一种,它能使接口不兼容的对象能够相互合作。 假如你正在开发一款股票市场监测程序,它会从不同来源下载XML格式的股票数据,然后向用户呈现出美观的表。 在开发过程中,你决定在程序中整合一个第三方智能分析函数库。但是遇到了一个问题,那就是分析函数库只兼容JSON格式的数据。 你可以修改程序库来支持XML。这可能需要修改部分依赖该程序库的现有代码。甚至还有更糟糕的情况,你可能根本没有程序库的源代码,从而无法对其进行修改。 你可以创建一个适配器。这是一个特殊的对象,能够转换对象接口,使其能与其他对象进行交互。 适配器模式通过封装对象将复杂的转换过程隐藏于幕后。被封装的对象甚至察觉不到适配器的存在。例如,你可以使用一个将所有数据转换为英制单位的适配器封装运行于米和千米单位制中的对象。 适配器不仅可转换不同格式的数据,其还助于采用不同接口的对象之间的合作。运作方式如下:1-适配器实现与其中一个现有对象兼容的接口。2-现有对象可以使用该接口安全地调用适配器方法。3-适配器方法被调用后将以另一个对象兼容的格式和顺序将请求传递给该对象。 有时你甚至可以创建一个双向适配器来实现双向转换调用。 让我们回到股票市场程序。为了解决数据格式不兼容的问题,你可以为分析函数库中的每个类创建将XML转换为JSON格式的适配器,然后让客户端仅通过这些适配器来与函数库进行交流。当某个适配器被调用时,它会将传入的XML数据转换为JSON结构,并将其传递给被封装分析对象的相应方法。 适配器有两种,分别是对象适配器、类适配器,一般采用对象适配器。对象适配器的类 类适配器使用了继承机制:适配器同时继承两个对象的接口。请注意,这种方式仅能在支持多重继承的编程语言中实现,例如C++。类适配器类
真实世界类比: 如果你是第一次从美国到欧洲旅行,那么在给笔记本充电时可能会大吃一惊。不同国家的电源插头和插座标准不同。美国插头和德国插座不匹配。同时提供美国标准插座和欧洲标准插头的电源适配器可以解决你的难题。
实际运用中,像STL源码的stack和queue的代码,内部都使用了deque,这个deque相当于内部的一个Adapter,虽然没有明确的感觉谁新谁旧,但是就是用deque转成需要的stack或queue。当然他们这部分代码没用指针,是直接将deque对象放上去。这时候我们并没看到stack、queue的接口是什么,它们的继承是什么,因为它们本身既是接口也是实现,且符合适配器的原则即可将老的接口转为新的接口。
class stack{
deque container;
}
class queue{
deque container;
}
设计流程探讨
代码实现
文章为作者独立观点,不代表股票交易接口观点