首页 > 哈亚瑟百科 > adapter模式(Adapter模式实践——将接口转换为客户端期望格式)

adapter模式(Adapter模式实践——将接口转换为客户端期望格式)

Adapter模式实践——将接口转换为客户端期望格式

介绍

Adapter模式是一种结构性设计模式,其核心在于将一个类的接口转换为客户端需要的另一种接口形式。在代码重构或者两个不兼容的类需要协同工作的情况下,这种模式会变得很有用。本文将详细介绍适配器模式在实践中的应用。

场景

情景如下: 你是一个拥有几个RESTful API的开发人员,你还有一个App需要访问这些API;你需要使用一种有用的方式将API的输出转换为App所需的格式。在这种情况下,适配器模式可以让你执行这种科学事实,同时还可以保持代码的清晰度。

实践

这个例子中,我们将使用node.js和Express框架,展示如何设计一个RESTful API从XML数据集合到JSON。 坑点: 首先,我们必须有两个控制器:一个为我们的XML,另一个为JSON。我们需要重构xmlToJSON.js并创建jsonCtr.js。 开始实践,实现代码如下: ```xmlCtrl.js``` ```js const xmlToJSON = require('xmlToJSON'); module.exports = (()=>{ 'use strict'; const xmlCtrl = require('express').Router(); xmlCtrl.get('/', (req, res)=> { let xml = '<?xml version=\"1.0\"?>'; xml += 'Salad5.00GoodSteak15.00Great'; xmlToJSON(xml, function(err, json){ if(err) { res.status(422).json({message: 'Error processing XML'}); return; } res.status(200).json(json); }); }); return xmlCtrl; })(); ``` 尽管我们可以看到我们只是返回纯xml。 但是,查看xmlToJSON.js文件的来源于是Node.js中的xml2js模块。 ```js const xml2js = require('xml2js'); module.exports.convert = (xml, done )=>{ xml2js.parseString(xml, (err, json) => { if(err){ done(err); } else { done(null, json); } }); }; ``` 适配器的重要部分——jsonCtrl.js,如下所示。 ```js const xmlCtrl = require('xmlCtrl'); const xmlToJSON = require('xmlToJSON'); module.exports = (()=>{ 'use strict'; const jsonCtrl = require('express').Router(); const transformResponse = (type) => (req, res, next)=> { const oldJson = res.json; res.json = (data) =>{ switch(type){ case 'json': return oldJson(data); break; case 'xml2json': xmlToJSON.convert(data, (err, xmlData)=>{ if (err) return next(err); res.json(xmlData); }); break; default: res.json(data); } }; next(); }; jsonCtrl.use(transformResponse('json')); jsonCtrl.get('/', (req, res)=> { let xml = '<?xml version=\"1.0\"?>'; xml += 'Salad5.00GoodSteak15.00Great'; res.json(xml); }); return jsonCtrl; })(); ``` 让我们来分解一下jsonCtrl.js的代码段。 首先,我们导入xmlCtrl和xmlToJSON。 接下来,我们定义了一个中间件函数transformResponse,该函数将传入的字符串类型与当前响应相比较,并将其转换为期望的输出类型。转换使用了XML到JSON的转换。 这个函数的主要目的是改变响应中的默认JSON解析行为,使用res.json();更改为res.json(type);。在type变量中,传递我们期望的响应格式。 接下来,我们附加此中间件来自动处理响应转换,然后与默认的JSON响应一样,将一些例子XML作为响应返回。 到此,我们就完成了一个基本的实用适配器模式,从XML到JSON.

总结

在这篇文章中,我们讲述了适配器模式以及怎样把理论应用到实践场景中,从XML到JSON的转化。适配器模式在处理不兼容接口的代码库方面极其有用,可以轻松重构和解耦代码。我们是如何将一个xmlToJSON的库转换为自己期望格式处理的示例。最后,希望读者们也能够从实例中掌握这种模式,实现工业标准编码的做法。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至:3237157959@qq.com 举报,一经查实,本站将立刻删除。

相关推荐