黑马程序员技术交流社区

标题: 【已解决】经常说需要面向接口编程,请问到底有什么好... [打印本页]

作者: 刘芮铭    时间: 2012-8-28 22:35
标题: 【已解决】经常说需要面向接口编程,请问到底有什么好...
本帖最后由 刘芮铭 于 2012-8-29 16:19 编辑

看了张孝祥老师的JAVA高薪技术,交通管理系统等!
经常看见张老说要尽量面向接口编程!
如:List list = new ArrayList();

请问面向接口编程到底有什么好处?

作者: 方志亮    时间: 2012-8-28 22:40
在小项目中,是体验不到的。使用接口编程,易于程序扩展,降低程序耦合性。
  举个常用的例子说吧,你有个方法为:public viod doxx(ArrayList arraylist),方法调用时,参数必须为ArrayList对象。某天,当参数需要更换为其他集合类时,必须更改代码;此时如果用接口的话,就不须了;将方法更改为public viod doxx(List list),方法调用时,参数就很灵活了,可以传入ArrayList、LinkedList等等,这样从而降点耦合了。


作者: 谭海鹏    时间: 2012-8-28 23:13
面向接口编程,本人觉得主要就是为了提高程序的扩展性和降低了耦合性。
就像计算机的接口一样,前期计算机刚出来的时候是没有USB接口的,如果要添加一些计算机的设备很麻烦,也巨痛苦。为了解决这类问题,生产计算机的厂商们联合起来制定了USB接口标准,于是USB接口就这样产生了。只要开发的设备符合USB接口原则,至于这些设备是移动硬盘还是USB的鼠标我们不用去关心,插到USB接口上就可以使用。这样就增加了计算机的扩展功能,降低设备和计算机的耦合性。
作者: 乔九    时间: 2012-8-28 23:19
提高扩展性,便于后期维护和升级
作者: 资建文    时间: 2012-8-28 23:23
哦  学习下  也挺好的
作者: 杨鹏鹏    时间: 2012-8-28 23:39
public class Me extends Person implements smoke{
@Override
void eat(){
        System.out.println("吃饭");
       
}

@Override
public void smoke() {
       
}
}
class Person{
        void eat(){
                System.out.println("吃饭");
        };
}
interface smoke{
         void smoke();
}
//  因为抽烟不是人的基础功能 所以定义成父类继承就不合适 定义在父类继承了就变成是人都必须抽烟 所以定义成接口你需要定义person这个类抽烟时你就implements这个接口 就有抽烟功能 而不想继承那样强制性的拥有其父类功能 类与类之间的耦合度降低了
作者: 谭海鹏    时间: 2012-8-29 00:41
/*
结合前面给你讲的大白话再给你举个实例,希望对你有帮助

需求:笔记本电脑与USB设备的运行。


增加笔记本的扩展功能,降低后期设备和笔记本的耦合性。
这时我们会想到什么?接口。

需要先定义好一个规则。
笔记本可以使用这个规则。其他设备可以实现这个规则。
这样笔记本就可以使用符合规则的设备啦!
*/

//定义规则
interface USB
{
        public void open(); //打开方法
        public void close();//关闭方法
}

//笔记本使用符合规则的设备
class NoteBook
{
        public void run() //笔记本电脑运行方法
        {
                System.out.println("notbook run");
        }

        public void useUSB(USB u)//USB u = new USBMouse();//接口类型的引用指向了自己的子类对象。
        {
                if(u!=null){
                        u.open();
                        u.close();
                }
        }
}

//USB鼠标设备,实现接口中的方法
class USBMouse implements USB
{
        public void open()
        {
                System.out.println("usemouse open");
        }

        public void close()
        {
                System.out.println("usemose close");
        }
}

//USB键盘设备,实现接口中的方法
class USBKey implements USB
{
        public void open()
        {
                System.out.println("usbkey open");
        }
        public void close()
        {
                System.out.println("usbkey close");
        }
}

//电脑运行
class NoteBookDemo
{
        public static void main(String[] arg)
        {
                NoteBook book = new NoteBook();
                book.run();
                book.useUSB(new USBMouse());//只需要将USB鼠标插入电脑运行即可
                book.useUSB(new USBKey());////只需要将USB键盘插入电脑运行即可
        }
}


/*
这样只需要定义好接口,所有USB设备只需要实现接口中的方法,无需知道笔记本电脑内具体是怎样实现的,
比较本定义好以后也不需要去修改,只要将USB设备传入笔记本的USB方法即可。

这样就增加了笔记本的扩展功能,降低设备和笔记本之间的耦合性。
*/




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2