admin管理员组

文章数量:1442034

设计模式:适配器模式(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对象服务

本文标签: 设计模式适配器模式(Adapter)(2)