zoukankan      html  css  js  c++  java
  • 更佳的封装之路面向对象的封装思想

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

     

    关于封装的领悟:

    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

  • 相关阅读:
    2013.4.15 Particle Swarm Optimization with Skyline Operator for Fast Cloudbased Web Service Composition
    Adaptive service composition in flexible processes
    2013.4.13 DomainSpecific Service Selection for Composite Services
    2013.4.14 Modeling and Algorithms for QoSAware Service Composition in VirtualizationBased Cloud Computing
    2013.5.29 Towards Networkaware Service Composition in the Cloud
    Efficient algorithms for Web services selection with endtoend QoS constraints
    SQL Server中常用的SQL语句
    接口限流自定义注解
    linux服务器生产环境搭建
    MVEL自定义函数重复掉用报错:duplicate function
  • 原文地址:https://www.cnblogs.com/weilao/p/2011906.html
Copyright © 2011-2022 走看看