设计模式:适配器模式(Adapter)(2)
场景二:系统维护
终于,你的系统交付完成,进入维保阶段。当你每天喜滋滋的挣着边际收益时,突然有一天,甲方爸爸又说:“某某供应商好像说改了什么接口,具体我也听不懂,你处理一下。”当你和对方联系时,可能瞬间气血攻心......什么?改接口了?不准备提供 XML 格式的结果了?改 JSON 格式了?还不是一次性,要慢慢改?苍天啊,大地啊,我得罪谁了......
你开始打开项目,找到对应的代码,然后陷入沉思:我该怎么糊弄过去呢?
代码语言:javascript代码运行次数:0运行复制*!* 获取服务对象
*!* m.XMLWebServer = .....
Local cXML as Character
m.cXML = m.XMLWebServer.GetData()
*!* 将 XML 格式转换为 Cursor 的代码
*!* 其他业务逻辑
如果像我之前对设计模式一无所知时,大概率会更改为以下的代码:
代码语言:javascript代码运行次数:0运行复制*!* 获取服务对象
*!* m.XMLWebServer = ......
*!* m.NewServer = ......
If 条件 = .F.
Local cXML As Character
m.cXML = XMLWebServer.GetData()
*!* 将 XML 格式转换为 Cursor 的代码
Else
Local cJSON As Character
m.cJSON = NewServer.SendData()
*!* 将 JSON 格式转换为 Cursor 的代码
Endif
*!* 其他业务逻辑
然鹅,这样的改动有 N 处......虽然根据熵增定律最终会混乱不堪,但是,谁也不想迅速的形成屎山......如果你理解了适配器设计模式,至少,可以减缓趋势。
首先,设计一个适配器类
代码语言:javascript代码运行次数:0运行复制*** <summary>
*** 适配器类
*** </summary>
Define Class ServerAdapter as Custom
*** <summary>
*** 获取服务所提供的数据
*** </summary>
*** <param name="toObj">服务对象</param>
Procedure GetData(toObj As Object)
Local lcReturn as String
Do Case
Case m.toObj.Name = "XML"
m.lcReturn = m.toObj.GetData()
This.XMLToCursor(m.lcReturn)
Case m.toObj.Name = "JSON"
m.lcReturn = m.toObj.SendData()
This.JSONToCursor(m.lcReturn)
EndCase
EndProc
*** <summary>
*** XMLToCursor
*** </summary>
*** <param name="tcString">字符型,XML字符串</param>
*** <remarks></remarks>
Procedure XMLToCursor(tcString as String)
*!* 将 XML 格式转换为 Cursor 的代码
EndProc
*** <summary>
*** JSONToCursor
*** </summary>
*** <param name="tcString">字符型,JSON字符串</param>
*** <remarks></remarks>
Procedure JSONToCursor(tcString as String)
*!* 将 JSON 格式转换为 Cursor 的代码
EndProc
EndDefine
原始代码就可以更改为:
代码语言:javascript代码运行次数:0运行复制*!* 获取 m.XMLWebServer 或者 m.NewServer 对象
Local loServerAdapter as ServerAdapter
m.loServerAdapter = NewObject("ServerAdapter")
m.loServerAdapter.GetData(m.XMLWebServer)
*!* or
*!* m.loServerAdapter.GetData(m.NewServer)
*!* 其他业务逻辑
OK。到这里,就结束了。既重构了代码,又提高了代码的复用性。
泡上一杯茶,点上一支小烟,继续悠哉游哉......
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2025-04-02,如有侵权请联系 cloudcommunity@tencent 删除接口设计模式adapter对象服务发布者:admin,转转请注明出处:http://www.yc00.com/web/1747983616a4714856.html
评论列表(0条)