浅读《大话设计模式》————5、会修电脑不会修收音机?——依赖倒转原则
电脑比收音机简单吗?为什么拆开两者,很明显,收音机看起来还要比电脑更复杂呢?原来,好的架构好的设计在哪里都是通用的!电脑各部件缺一不可,但是绝不是只针对某一个或者某一类产品,所有不同产品的厂商都只服从一个统一的标准,这样,我们就看不出电脑中哪一个是高层了。CPU?内存?或者主板?。。。都不是,谁也不依赖谁,依赖的是一个统一的接口标准!
依赖倒转原则:抽象不应该依赖细节,细节应该依赖抽象。具体到一个实际问题编程,应该是定义好的接口,这个接口不属于哪一个具体的东西,应该是一个高层的抽象,然后就是针对接口编程,而不要对实现编程。
讲到这里,似乎世界的一切问题都迎刃而解,一切显得是那样的轻而易举!慢!一定不要自负的轻视对手,好,谁都很听话的服从这个抽象接口,那么这个抽象接口怎么来?一切都在变,难道这个抽象类就是可以违背这个哲学上绝对真理的特例家伙?他可能自身都要不停的变!完了,到哪里去找这样一根标尺呀?
标尺也是自己定义的!无非是会需要随实际情况变化吗?不要忘了,我们已经学会的绝技——开放—封闭原则。我们保证提供基本功能的接口不变,实际需求增加时,只要做开放扩展即可,面向对象的继承能帮助我们找到正确适用实际问题的方法,问题不就解决了吗?恩,这样设计总结出统一的抽象接口或者抽象类是满足我们的需求的,不过,还有关键的一点,这一系列类必须要满足一个原则:里氏代换原则:子类型必须能够替换掉他们的父类型。这个原则在许多别的情况下,并不一定是完全满足的,但是此处用做标尺的抽象类,必须要满足!子类可以扩展做更多的事情,但是父类已经定义好的接口子类必须有实现,并且也必须是做一致的事情。
依赖倒转原则说明了:好的面向对象设计不应该是依赖具体实现中的那一部分,应该是针对抽象编程而不是针对细节编程,即程序中所有的依赖关系都是终止于抽象类或者接口。那样,高层、底层的改变都不会导致另外一部分要做变化了。
从北京去纽约喽,;-),还有陆路还要海洋,哈哈,变化再大我也不管,因为我做的是飞机!不过,你要是愿意先客车再渡轮也可以的哦~都是交通工具的抽象嘛!应该不会还有那个大侠想着依赖道路的,先穿跑鞋再换个泳衣去的吧~