接口和口罩
接口和口罩的相同之处何在?
1,首先,都有一个“口”字。而且这个口都有承担着传递信息的作用。
2,都能阻断一些流行疾病的传播。
3,都会带来一些不便。
2003年春天爆发的非典让大家最大限度的熟悉了口罩,使用了口罩,口罩也给我们带来了一定的安全保障
。
相应的在软件业,这个时时刻刻爆发着各种流行病毒(此病毒非电脑病毒)的产业中,大家对软件的口罩
--接口也越来越重视啦。我经过前些时间的学习和实践,有些心得,与大家分享,请大家指正。
在面向对象的软件开发中,软件是有一个个对象组成的。就好像是所有的人类构成了这个社会。既然是社
会,人和人之间就不能不发生关系,这些发生关系的人大体可以分为三类,需要深入了解,亲密接触并且
关系较稳定的人,例如恋人;只需要一般了解,需要时可以互相帮助的人,例如朋友;对你来说可有可无
无关紧要的人,例如陌生人。
而在病毒肆虐的非典时期,怎样才能使自己最大限度的幸免遇难呢?不外乎以下几条原则。
口罩使用原则:
1,尽量减少和别人接触,因为任何人都有可能变成传染源。这就要杜绝和的陌生人的接触。减少和恋人
,朋友的接触,当然不和恋人见面是不可能的。朋友之间也不能完全断绝往来。
2,和朋友接触时,必须戴上口罩,由于口罩一定程度上可以阻挡病毒的攻击。而且要尽量减少接触,可
以简单接触解决的事,不要把它搞复杂。
3,和恋人呢?当然和恋人接触时,如果可以的话,带着口罩也能起到一定的作用,但是好像很少接吻时
戴着口罩的。“哦,亲爱的,你今天戴的什么牌子的口罩,真不错,还是水果味的。”“哦,我刚才喝的
果汁的味道也不错,而且我是戴着口罩喝的!”。由于彼此要深度接触,所以,交叉传染一般是难免的,
口罩可能也是徒劳的。也许有时候单身也不是不错的选择:)。
4,和已经证实是传染源或者是疑似的人绝对不能直接接触,如果有什么话,最好通过中间人(例如医生
)转达,当然和医生接触也要戴口罩,他们也是人。
口罩选购指南:
5,必须戴有效的口罩。怎样才是有效的口罩呢?必须符合两点:1)不能妨碍正常的交流。2)能阻挡大
部分病毒。假如,汉尼拔(《沉默的羔羊》中的主角)的那个丑陋而又满是缝隙的口罩,就不能符合第一
个条件。而绑架者用来塞住被绑者嘴的破布也不能算合格的口罩(如果它可以称为口罩的话),它违反了
第二条。
6,尽量戴漂亮的口罩,至少也应该是看着顺眼的。这样大家才更乐意和戴口罩的你打交道,而不是想让
你摘掉那个难看的口罩再说话。
已知副作用:
7,最后,也是最重要的。戴上口罩后,别人不再认的出你是谁。平时只喜欢和美女打交道男孩,偶尔也
会去和恐龙搭讪。当然戴上口罩后他也不知道她就是恐龙。也许可以因此成就想象之外的姻缘。
暂时只有这些,大家也许还有更好的建议。告诉我。
这些人类抵御非典时的原则,在于我们的软件中也同样有效。
软件业中时时刻刻都在爆发着一场一场的大大小小的瘟疫,流行疾病。小的如,在”复制粘贴大法“广泛
”重用“的代码这样的小bug,已经有了一些预防和解决的办法(1),虽然这些办法我们还没有彻底的用
起来。大的如需求变更这样的”非典“量级的疾病,却还没有能完全避免的疫苗,不过一些预防措施还是
有的,其中现在比较流行并有效的一种就是以上的“口罩原则”。也就是合理使用接口。依次历数如下:
说明:下文中,“非典”指代需求变更;“恋人”指代有相互之间依赖性较强,其中一方改变另一方必须
随之改变的对象;“朋友”是指相互只用到已知的,有限的和稳定的几个功能的对象;“陌生人”是指相
互之间没有逻辑相关性的对象;“传染源”和“疑似”是指已知的变化比较频繁的对象,或者在将来很可
能变化的对象;“口罩”自然是接口啦。
接口使用原则:
1,“不要和陌生人说话”这条古训,不用我再强调了,大家都应该知道并遵守的。如此,“陌生人”被
查出“非典”后,你就不用担心自己是否已经被传染了啦。
2,对于“朋友”尽量使用合适的“口罩”。例如“棋友”之间使用的“口罩”,就应该只能交流和“下
棋”有关的信息,“口罩”就可以“严格”一点,只允许这些信息通过。这样即使棋友被“确诊”了,我
也不用担心。当然如果“病毒”“感染”了我们的“口罩”的话,你也就不能幸免啦。也就是除非接口定
义都被修改了,否则不会被需求变更所牵连。如果用DIP原则来看的话,接口更应该定义的是你想要得到
的服务,所以除非你想得到另外的服务或对已有的服务已不需要,否则的话,接口不应该被修改。此时,
其实是你先的了“非典”,你传染了你的“朋友”--为你提供服务的对象。或许认为是同时得了“非典
”。
3,如果两个类互相过多的依赖的话,接口也不能起到作用。这个时候放弃接口,直接持有对方也许是更
好的解决方案。虽然在人类社会中,一对对的恋人令人羡慕,但是依赖如此紧密的对象最好没有,看来“
单身对象”更加受欢迎。但是绝对不能让这个数量太大,否则它们会象“三角恋”那样搞得不可开交。
4,有时,仅仅口罩也是不够的,还需要一个“医生”作为中介。特别是一些确定会变化的地方,这就能
更好的隔离变化。这时,一些设计模式就变的非常有用。而且很多设计模式都是靠这个中介来实现的,例
如Adaptor, AbstractFoctroy等。“恋人们”好像很难通过中介来接吻,当然《千王之王》中周星驰可以
,但不是每个人都做得到的。如果你本不会得“非典”,却因为你的“恋人”频频传染你,使你得“非典
”,我想你应该考虑疏远这个“恋人”,因为你们不合适,你们不是“同命鸟”。
接口设计原则:
5,设计接口时,也必须尽量发挥它得有效性。首先,接口要满足你的要求,适应你得需求。在此基础上
,接口中得方法时越少越简单越好。这样你暴露给别人得信息就越少。“暴露狂”在软件世界同样不受欢
迎。
6,接口命名要尽量的优美。怎么就优美呢?首先语义清楚,合乎规范(比如工厂类用XXXCreator),还
要用词简单,精炼,最好是常用词,不让大家看不懂,还要求助金山词霸。
额外好处:
7,接口在隔离变化的同时,还带来了灵活性的好处。假如,我要看球赛,我说“给我一个电视看球赛!
”,别人可以给你黑白电视,彩色电视,液晶电视,高清电视等等,给你选。我在窃喜“原来有这么多种
电视啊,多亏刚才没说给我一台彩色电视。呓,那边是什么?”“是身临其境三维体验器,你不但能用它
看球赛,而且会用身临其境的感觉。”“好,我就要它了。”“对不起,尊敬的先生,您刚才说的是要电
视,那不是电视,所以您不能用它。”“这个死板的家伙,也许我刚才应该说,“嘿,给我一个能欣赏球
赛的东西””我心想。
或者比喻有些牵强,表达的也有些混乱。这也说明我对接口理解的还不够深刻。
虽然如此,却希望借此表达出自己对接口的一些理解,期待大家的指正和讨论。