ZFYCH_Love

Simply but Powerful

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  115 随笔 :: 1 文章 :: 36 评论 :: 18万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

借用大神李建忠的思路,应用一个模式的时候,我们的动机是什么,如果最初的动机都不清楚,那只能是为了用模式而用模式了。

用一种模式,是为了解决一类实际项目中遇到的问题。

进入正题:

访问者模式的使用动机是什么?

答曰:我们在开发时,为了程序能更好的扩展、解耦。。。总之一系列的目的吧,我们会使用接口来实现多态。也就是说,一个方法,不同的子类中有不同的实现。

然后。。。很久以后,我们要在接口中加一个方法,怎么做呢?1->修改接口;2->修改每一个实现类(实现这个方法嘛)。如果是个成熟的程序,这种修改,是可能带来风险的。

在这里讲一个小事,在初学时,项目经理设计了一套实现,有四种订单,暂且称为ABCD,也就是有四个实现类,继承同一个接口,最初他们都有相同的数据库操作,增删改查。这样的抽象-实现方式没有任何问题。直到有一天,我临时参与到这个活里,

新加了一种订单:E。E里面除了有增删改查的操作外,还有其他的操作业务。怎么办?

当初我首先想,不在接口里定义,只在实现类E里面写这个方法。这样对其他的程序没有修改。可是随之而来的问题就是:这样还是面向接口编程了?为什么要面向接口?一是封闭实现,只对外公布接口;二还是为了扩展方便。试想,我都深入到实现类中了,我也就破坏了人家最初的设计结构了,对不?

那怎么办?没办法,只能接口中定义,然后在ABCDE中,分别实现,当然,ABCD中没做任何处理,仅仅是为了适应这次修改,代价,可想而知。牵一发动五肢了。

我们能避免这种修改吗?学了这个模式之前,我知道能,但是咱不会啊。现在看来,原本可以轻松搞定的。

我们的软件设计理念i什么?对了,对修改封闭,对扩展开放,是为封闭开放原则。

也就是说,我不想动原来的所有,或者大部分代码,我通过写新的内容,然后做一下关联,来应对这种变化。

怎么办?

访问者模式登场。

posted on   xiaoyang_  阅读(133)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示