• 更佳的封装之路面向对象的封装思想


    因为最近用面向对象做迷宫,思考了许多问题。然后今天又看了系统分析的一些书,有了若干领悟,在此拿出来与诸位博友分享。

     

    关于封装的领悟:

    key 1。封装的目标:封装易变动的部分。(前人的经验总结)

    key 2。尽可能精确地定位变动。(威老的升华)

     

    封装的好处就是可以减少变动对整个系统带来的影响,并且可以有效地控制系统的复杂程度。

    PC机的封装就是一个很经典的例子,我们只需要知道电脑由CPU、内存、主板、硬盘……组成,而不是去探究PC是由什么或非门、全加器、乘法器……之类的东西组成。

    当我们的内存需要加大时,不需要拔掉原有的内存,只需要加上另一条内存即可,扩展的同时又不影响原有的内存。内存坏了,只需要拔掉它,换上另一个好的即可。如果没有封装,我们就把内存从1Gb升级到2Gb就必须把整个PC机拿去工厂里焊上1Gb的内存颗粒。若不封装,也就没有所谓的CPU、内存之类的概念,PC坏了,就得一个一个电路地排查过去,数亿个晶体管以及数不清的线路要查到哪一年去?

    威老的迷宫第二季里,我提取并封装了RouteChecker,因为这是一个很有可能发生变动的地方(可能会增加其他方向的Check,NortheastChecker、SoutheastChecker等等),在我封装了之后,这个地方的变动对Explorer类的影响就大大减小了。但是,在文章的最后我又发现了2个很严重的问题:

    1。我需要对Walk进行同样的封装,工作量十分巨大。

    2。就算我封装好了Walk,当我需要增加其他的方向的Check时,也会需要增加NortheastWalk、SoutheastWalk…显然这里存在着很严重的问题。重复了。

    那么问题究竟出在哪里?

    经过排查,我发现问题就出在RouteChecker并不是变动的具体地点,变动发生在RouteChecker的方向上,其实只有方向发生了变动!所以我们要做的是封装方向!

    好比我封装时候把专管计算的CPU给忽略了,而另外给硬盘配备了一个计算模块,那么接下来,我也必须给内存、主板、光驱……这一大堆的东西也各配备一个完全一样的计算模块,这样的设计显然烂到无可救药。

    Very Good 找到了问题所在,接下来要办的事情就简单了,修改模型!

    很快我便到以下模型:

     

    系统几乎简化了一倍!复杂程度大大降低!实实在在地尝到了面向对象的甜头。

     

    到这里我真是越来越佩服我自己了。。。

    精确定位变动

    大家想必也已经产生共鸣了吧!

    作者:威老 From cnblogs

  • 相关阅读:
    python 多进程下的日志打印
    卷积神经网络思考点,卷积网络就是很多个小分类器构建的网络
    ShuffleNetV1 paper reading
    find,grep,mv 组合使用,对大量数据切割方便
    常用的开源协议
    python3 日志重复打印logger
    pytorch clamp 与clamp_区别
    version GLIBCXX_3.4.21 not defined in file libstdc++.so.6 with link time reference
    pytorch,cuda8,torch.cuda.is_available return flase (ubuntu14)
    opencv remap 函数
  • 原文地址:https://www.cnblogs.com/weilao/p/2011906.html
Copyright © 2020-2023  润新知