admin管理员组文章数量:1438278
设计模式:工厂方法模式(Factory Method)(2)
当年做一个项目时,还不懂什么是设计模式,仅仅是按照经验完成了需求。回头看看,就是暗合桥接模式。但是,在整个需求实现过程中,甲方需要我在已经设计好的标准业务逻辑中添加非标的需求,因为,在他们眼里,从业务角度来看,是自然的拓展。
如果当年我知道还有这样一种设计模式,或许,成品会更优秀。
回到正题。作为实际业务高度抽象的的结果,在标准逻辑下存在 UI_A 类和 Data_A类,它们的代码如下:
代码语言:javascript代码运行次数:0运行复制Public loForm as UI_A
m.loForm = CreateObject("", CreateObject("Data_A"))
m.loForm.Show()
*** <summary>
*** 标准逻辑下的 UI
*** </summary>
Define Class UI_A As myForm
oDE = .Null.
Procedure Init(toDE As Custom)
This.oDE = m.toDE
Endproc
Procedure Operation()
This.oData.Operation()
Endproc
Enddefine
*** <summary>
*** 标准逻辑下的数据处理
*** </summary>
Define Class Data_A As myDE
*** <summary>
*** 代表标准逻辑的数据操作方法
*** </summary>
Procedure Operation()
*!* 这里是标准逻辑下的数据处理
Endproc
Enddefine
按照标准的桥接模式的设计要素,那么,这里仅仅缺少"约束"类的“接口”。但是按照 VFP 的特性,"接口"存在与否的重要性,远不如开发者遵循“接口”的自觉性重要。
当时的处理方式,仅仅使用了所谓的CV大法:
代码语言:javascript代码运行次数:0运行复制Public loForm as UI_B
m.loForm = CreateObject("", CreateObject("Data_B"))
m.loForm.Show()
*** <summary>
*** 非标准逻辑下的 UI
*** </summary>
Define Class UI_B As myForm
oDE = .Null.
Procedure Init(toDE As Custom)
This.oDE = m.toDE
Endproc
Procedure Operation()
This.oData.Operation()
Endproc
Enddefine
*** <summary>
*** 非标准逻辑下的数据处理
*** </summary>
Define Class Data_B As myDE
*** <summary>
*** 代表非标准逻辑的数据操作方法
*** </summary>
Procedure Operation()
*!* 这里是非标准逻辑下的数据处理
Endproc
Enddefine
如果当时知道工厂方法模式,也许有更完美的设计:
代码语言:javascript代码运行次数:0运行复制Public loForm As UI
m.loForm = CreateObject("UI")
m.loForm.Show()
*** <summary>
*** 模拟抽象类
*** </summary>
Define Class AbstractionUI As myForm
oDE = .Null.
*** <summary>
*** 充当抽象方法的声明,子类必须实现该方法
*** </summary>
Procedure Init()
EndProc
*** <summary>
*** 模板方法 - 调用具体数据处理逻辑
*** </summary>
Procedure Operation()
This.oDE.Operation()
EndProc
EndDefine
*** <summary>
*** 具体的 UI
*** </summary>
Define Class UI As AbstractionUI
*** <summary>
*** 工厂方法的实现
*** </summary>
Procedure Init()
If 条件 = 标准逻辑
This.oDE = This.CreateDE("A")
Else
This.oDE = This.CreateDE("B")
EndIf
EndProc
*** <summary>
*** 工厂方法的封装,可扩展
*** </summary>
*** <param name="cType"></param>
Procedure CreateDE(cType As String)
Return CreateObject("Data_" + cType)
EndProc
Enddefine
*** <summary>
*** 标准逻辑下的数据处理
*** </summary>
Define Class Data_A As myDE
*** <summary>
*** 代表标准逻辑的数据操作方法
*** </summary>
Procedure Operation()
*!* 这里是标准逻辑下的数据处理
Endproc
EndDefine
*** <summary>
*** 非标准逻辑下的数据处理
*** </summary>
Define Class Data_B As myDE
*** <summary>
*** 代表非标准逻辑的数据操作方法
*** </summary>
Procedure Operation()
*!* 这里是非标准逻辑下的数据处理
Endproc
Enddefine
这样,仅需增加一个模块参数,就可以在同一可执行文件中随时在标准和非标之间进行切换而无需对项目进行重新编译。
PS. myDE 类可以认为是一个接口(类模板)
这个代码融合了工厂方法模式和桥接模式的本质,应该是最佳方案。
未完待续......
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2025-04-22,如有侵权请联系 cloudcommunity@tencent 删除factory接口设计模式数据数据处理本文标签: 设计模式工厂方法模式(Factory Method)(2)
版权声明:本文标题:设计模式:工厂方法模式(Factory Method)(2) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1747565489a2710635.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论