不要和陌生人说话

来源:互联网 发布:js冲锋枪图片 编辑:程序博客网 时间:2024/04/29 21:48

       不要和陌生人说话

       我曾经忽视了这条原则,以及和他相似的其他几条原则,这使得我在以前的开发中埋下了很多Bug,现在要接受教训了。

 
       面向对象的设计和开发中,最核心的问题就是类的构建以及类于类之间的关系。
 
       如何设计类之间的继承关系,基本原则就是:父类和子类之间,子类要遵照父类的接口,任何使用父类指针的位置,任何子类都可以在此使用。继承关系是面向对象的基本,大多数人包括我在内,都很有意识的去遵从这个原则。
       除了继承,类之间的其他关系更为灵活,这些关系的的设计和实现是面向对象最难掌握的部分。这也就引出了很多设计模式。认真研读这些设计模式,发现其中没有任何一个模式的任何一个类去和陌生人谈话,类的继承层次尽量少,这一点我一直很注意,但从没注意过类的其他关系层次也要尽量少。
       无视原则的后果是很严重的,代码会变得毫无意义的复杂,牵一发而动全身,一堆类僵死在了一起,没有一点灵活性可言。
       举一个例子,有一个Person类,有一个smoke的动作,需要一个lighter,于是你传递一个desk参数进去,desk里有drawer,drawer里有lighter。这样貌似还可以用:
        class Person
        {
              smoke(cigar, desk)
              {
                     desk.getDrawer().getLighter().light(cigar);
              }
       }
       这里两个问题:
       1. Desk.getDrawer().getLigher() 这个过程的空指针问题。
       2. 如果我现在没有desk,而只有一个lighter,或者我有一个bag,bag里有lighter,怎么办?
       于是,desk,drawer, person这些类就僵死在一起了,要解决问题2,要么改变现有的接口,要么就得构建一个desk,一个drawer,把火柴放进去,这种做法很可笑,但我经常做。
      
       要真正解决这些问题,就需要我们认真地遵从原则,尽量简化关系,尽量让每个类、每个方法做好自己的本职,Keep it simple, stupid。
原创粉丝点击