Eric" Gamma说,要面向抽象编程。面向接口编程是面向对象的核心。防止 “everything depends on everything” 问题,即具体依赖于具体。
从GoF设计模式中,我们已经习惯一种思维编程方式:Interface Driven Design 接口驱动,接口驱动有很多好处,可以提供不同灵活的子类实现,增加代码稳定和健壮性等等,但是接口最终还是需要实现的,也就是如下语句迟早要执行:AInterface a = new AInterfaceImp();
思考至此,我似乎有点大彻大悟:2个类之间如果有依赖关系,总需要在代码里表现出来。各种先进的思想比如IOC要做的只是转移这些依赖关系到一个第三方的地方,从而使得2个类对彼此的存在全不知情,从而彻底解耦了2个类的实现,使得各自的实现里谁也不依赖谁。到了runtime,由一个第三方的类比如一个container在某个时间点上调用体现2个类依赖关系的代码(比如:Boy boy = new ChinaBoy(); Girl girl = new ChinaGirl(boy)),从高度抽象的角度看,即实现了类之间关系的“依赖注入”。
有时间学学Spring框架。