一个自定义Action中要调用相应的业务逻辑类 , 声明对象的方法 总是 (业务逻辑接口)   (对象名) = new (实现业务逻辑的类)();   这是(业务逻辑接口) 类型 对象 指向 (实现业务逻辑的类) , 但是我就不明白了  , 这样写有什么必要的 , 直接写成
(实现业务逻辑的类)   (对象名) = new (实现业务逻辑的类)();  不就完了吗? 至于那么麻烦吗? 

解决方案 »

  1.   

    说反了 是你只需要修改实现的类而不用修改接口,接口是一种规范
    比如
    如果现在需要LinkedList
     List list = new ArrayList();
    你只需要改这一行
    List list = new LinkedList();如果你当初
    ArrayList list = new ArrayList();
    那就需要你把所有调用ArrayList方法的地方全部修改
      

  2.   


    面向OOP软件设计一个准则(去看设计模式),你得先知道接口的作用是什么,为什么sun他专门定义接口,给别的公司去实现,因为他牛B,O(∩_∩)O哈哈~。反正无事做,就聊聊吧。转正题,设计接口,一定保证在近期不能改变,他是一种规范,需要你去按这个规范去实现接口的,如果接口一动,那么实现类就大多时候挨动!所以SUN公司定义的接口也不容易啊。既然你明白了接口是不能乱改的,那么好了,你的Action中要调用对象某个功能,应该是调用接口(相当于SUN公司定义的接口,一个可以说是完美的接口)的方法,业务逻辑相当于别的公司的实现, 当你在以后的工作中或者别的事,你突然想在原来的功能上加上一些东东,如:test()方法,然后在想在action中调用它,按软件设计的原则,这个是不允许的,其实很像现实世界中一样,一个电路产品出来了,你再去内部乱搞,那么,违反了它的规定,原理性已经被改了,电路必将烂掉,到程序,你调用接口的,就想电路的原理性,如果你在ACTION(相当于电路产品)中不按这个接口(原理)去运行,相当你去调用业务实现类的方法,系统将不敢保证正常运行而且很可能的出现问题。不说了,简单的问题 ,等下越说越远啦。如果不明白,你就向楼上所说的,改改代码只该一个地方吧。NNT,再说两句,其实很多人就只能像楼上那样简单的解释,是的没有错,但是这个太不是重点,了解太简单了,可能是看书看的多了,或者百度搜索老搜到这么一个解释的吧 O(∩_∩)O哈哈~。 肯本就不再进行思考,不知道面向对象设计的一些思想。为什么同样的功能,不采用ASP,PHP,而用OO 语言??明白其中的道理吗??为什么ASP,PHP不适合搞大型的项目??
    呵呵,不说,再说离题万里了,睡觉了啦。哈哈,明天是年30啦,先祝福你们全家幸福哈,然后牛年快乐哈。
      

  3.   

    为了降低的耦合,举例子说明package com.test.mytest;public class Test {
    // 定义一个默认业务类型
    private I bussiness = null; public static void main(String[] args) {
    Test test = new Test();
    I i = null; // 原来的需求,调用_default的实例.
    test.setBussiness(new _default());
    i = test.bussiness;
    i.doSomething(); // 当系统需求发生变化,变成调用anotherClass的实例,通过setBussiness()来动态改变业务
    test.setBussiness(new anotherClass());
    i = test.bussiness;
    i.doSomething(); // 系统又变化了,变成调用othersClass的实例,通过setBussiness()来动态改变业务
    test.setBussiness(new othersClass());
    i = test.bussiness;
    i.doSomething();
    } public void setBussiness(I Ibussiness) {
    this.bussiness = Ibussiness;
    }
    }
    /**
     * 所有的业务都实现此接口
     */
    interface I {
    public void doSomething();
    }
    /**
     * 一个默认的业务
     */
    class _default implements I {
    public void doSomething() {
    System.out.println("I'm from _default");
    }
    }class anotherClass implements I {
    public void doSomething() {
    System.out.println("I'm from anotherClass");
    }
    }class othersClass implements I {
    public void doSomething() {
    System.out.println("I'm from othersClass");
    }
    }运行结果:
    I'm from _default
    I'm from anotherClass
    I'm from othersClassoop的一个原则:
    针对接口编程,不针对实现编程
      

  4.   

    oops,忘了格式化
    package com.test.mytest;public class Test {
    // 定义一个默认业务类型
    private I bussiness = null; public static void main(String[] args) {
    Test test = new Test();
    I i = null; // 原来的需求,调用_default的实例.
    test.setBussiness(new _default());
    i = test.bussiness;
    i.doSomething(); // 当系统需求发生变化,变成调用anotherClass的实例,通过setBussiness()来动态改变业务
    test.setBussiness(new anotherClass());
    i = test.bussiness;
    i.doSomething(); // 系统又变化了,变成调用othersClass的实例,通过setBussiness()来动态改变业务
    test.setBussiness(new othersClass());
    i = test.bussiness;
    i.doSomething();
    } public void setBussiness(I Ibussiness) {
    this.bussiness = Ibussiness;
    }
    }
    /**
     * 所有的业务都实现此接口
     */
    interface I {
    public void doSomething();
    }
    /**
     * 一个默认的业务
     */
    class _default implements I {
    public void doSomething() {
    System.out.println("I'm from _default");
    }
    }class anotherClass implements I {
    public void doSomething() {
    System.out.println("I'm from anotherClass");
    }
    }class othersClass implements I {
    public void doSomething() {
    System.out.println("I'm from othersClass");
    }
    }
    运行结果: 
    I'm from _default 
    I'm from anotherClass 
    I'm from othersClass 
      

  5.   

      i = test.bussiness;
      i.doSomething();直接bussiness.doSomething();就行了吧
      

  6.   

    通过上面的朋友的解释 , 明白了不少 .也许是我以前学JSP的时候 写的业务逻辑类的时候都是针对一个数据库表的操作写一个业务逻辑类, 相关的几个方法都在其中,但是方法的创建没有一个规范, 随意写的 ,  Controller中想要执行那种操作就调用类中哪个方法 , 很少用到接口 。我现在对接口的理解 , 一个接口在这里, 多个类实现它, 然后完成自己方法的实体 , 在action中 , 需求的变化 ,使之调用不同的实现类, 其它地方不变, 这样一个最大的好处就是被调用的类都遵循一个规范, 那就是接口的规范 . 所以说 , 最重要的一点 : 接口是一种规范 !