日期:2014-05-20  浏览次数:20604 次

在程序中为什么要用抽象类和接口??
从系统架构的角度讲它们确实有一定的作用,但是也增加了参数的传递次数是不是导致性能的低下?
小弟刚刚开始接触设计模式,对这个问题有写困惑,望各位高手帮忙解惑~~~

------解决方案--------------------
JAVA是支持动态绑定的语言,简单的说,就是在运行时才知道真正的类型。比如我们有一个接口A,他有很多的实现类,在我们的某个方法中的参数就是A,那么在编译这个类时,我们是不知道我们要用到的是A的哪个实现,只有在运行时才知道。这可是很不错的功能啊,你正在看设计模式,那么你看工厂模式了吗?基本上都是声明一个接口,由工厂去创建接口的一个实现。再比如Spring的DI(依赖注入):我们在程序中只声明一个接口,运用setter注入或构造子注入,我们只对接口编程。具体的实现是由Spring注入进来。比如客户说我要用JDBC连接数据库,过了几个月又说用Hibernate做持久层。那我们是不是要老去改我们的代码呢???不用,我们在程序中只声明一个接口啊,实现类是Spring注入进来的(通过配置文件)。今天你说用JDBC,那么我在配置文件中给你配置一个JDBC的实现(实现了前面说的那个接口),几个月后你又说用Hibernate,那么我在配置文件中给你配置一个Hibernate的实现(还是那个接口).这就是“松耦合”——开闭原则(对扩展开放,对修改封闭)
但是动态绑定确实和静态绑定比要慢一些(C语言),但是也带来了很多的好处,有得有失。
至于抽象类,我感觉尽量少用,除非你确定父类和子类是“is a ”的关系,而不是“has a"的关系,而且你也丢失了唯一的一次继承机会。尽量用组合(创建对象的方式)而非继承.