1
Mutoo 2013-12-01 22:04:15 +08:00 1
如果你做小项目的话,写的代码都是自己用,体会不会很深的。
但是如果你写的东西是给别人用的。很多人在用你的代码的时候,如果你一个小改动导致很多人的代码都不能用,得修改,你就知道面向接口编程的重要性了。 |
2
bokix 2013-12-01 22:05:45 +08:00 2
你现在住在一个最新式的高科技别墅里,所有一切都是自动化的,你的床头有一个按钮,按一下可以直接生产一杯拿铁咖啡,你只需要按一下按钮即可,别的什么都不需要做,不需要你选择水温,不需要你选择咖啡豆,不需要你指挥着去磨咖啡豆,仅仅按一下按钮即可。
有一天你不想喝拿铁了,你想喝卡布奇诺,你不需要把你的墙挖开重新换一个按钮,你只需要打电话告诉咖啡供应商,把我的拿铁“实现”换成卡布奇诺的”实现”,然后你还是按下原来的按钮,出来的就是卡布奇诺了,或者你可以两种都保留,周1到周5是拿铁,周末是卡布奇诺,你可以告诉咖啡商,把你的咖啡实现以工厂模式管理:周1到周5是拿铁,周末是卡布奇诺,这样,你墙上的按钮还是原来那个,你还是不需要管咖啡豆、磨咖啡、冲泡等一些列流程,还是仅仅按下按钮,就能平时拿铁周末卡布奇诺了。 这里的按钮就是接口,按钮背后,从咖啡豆-研磨-冲泡-到一杯成品咖啡出现在你面前,就是这个接口的具体实现,面向接口编程对你来说就是意味着你不需要在你想换咖啡口味的时候把你的墙敲开重新更换按钮,你也不需要关心按钮背后具体做了什么,你只关心最后呈现在你面前的咖啡,然后尽情的享用,enjoy your life! |
3
davepkxxx 2013-12-01 22:12:57 +08:00 1
在框架、工具包、大型项目中作用比较明显。
|
4
Ricepig 2013-12-01 22:55:14 +08:00 1
如果这个问题的背景是静态语言,那我举几个例子
1. 如果使用接口,意味着你如果要引入新的接口的实现,旧有的代码“可能”不需要重新编译,可以在运行时(runtime)更新(切换)这个实现。如果刚好旧有代码使用了对象工厂,甚至IoC容器,则只需要改变配置文件就可以指定实现这个接口的类。 2. 设想log4j,如果仅能够使用唯一的一个log目标(console,txt文件,数据库),那你用哪个new哪个就好,但是如果同时想用多个log目标呢?这个时候就可以说我有一个ILogger数组,对吗? 3. 设想你在实现一个框架,而另一个程序员在实现其中的一个组件(算法),你是不是要事先和他商量(规定)他的组件怎么调用呢?如果不规定接口,那么,是你写一个空壳类给他,还是他把他的组件写好提交给你以后你再接下去工作?如果组件多了呢? 如果这个问题的背景扩展到支持duck type的语言,则interface的作用,就在于“协议”--组件之间,严格规定程序员之间,如何协作。 |
5
HarryZD 2013-12-02 00:10:29 +08:00 1
po主可以这样想,如果没有接口没有抽象类改怎么设计一个系统。
|
6
uleh 2013-12-02 13:11:06 +08:00
配合工厂和接口,可以完全隔离开 API 和实现。不知道 lz 写过 JDBC 的程序没有。可以试想一下如果不是面向接口,你的程序就必须针对每一种数据库驱动实现。
|
7
bsbgong 2013-12-02 15:42:27 +08:00 1
简而言之:类与类之间要通信的时候,用接口!
这就是面向接口编程,目的是类之间的通信,什么xx模式都是这样设计的。 你可以自己想一下类与类通信的实现方法有哪几种,然后比较一下各自的优缺点,就知道是怎么回事了。 |
8
bombless 2013-12-02 19:32:46 +08:00 1
每个文件都有人负责的,不是你想改就改的……
|