ICustomer 是一个接口
Customer  是一个类
Customer已经实现ICustomer接口了下面代码那样写是什么意思?有什么用?
ICustomer customer = Customer();

解决方案 »

  1.   

    ICustomer customer = new Customer();
    这样写,你只能把Customer当做ICustomer服务的提供者,那么你只能使用ICustomer声明的服务。
    Customer customer = new Customer();
    这样写,那么你就能使用Customer类中所有的公开服务,此时你把它当做Customer来用。
    区别其实没啥,这两种写法都行,不存在什么设计、重用、面向接口之类的东西,这些东西是在设计结构时候定的,跟这里如何实例化一个类没有什么关系。比如你声明了一个ArrayList list = new ArrayList();你照样能把这个对象引用丢给参数列表类型为List的方法。
      

  2.   

    例如这种情况下使用面向接口的方式就会方便很多.
    做一个控制一些对象的管理器,对象可能是一个活动的角色,一个AI控制的NPC,或者一个自由移动的宠物,
    他们都可以实现自同一个接口IChar
    管理器中可以直接HashMap<Integer, IChar>来存储所有这些对象,当需要对某个对象操作时候都可以从这一个哈希表中处理,不用给每种做独立的集合了
      

  3.   

    这就是面向对象语言设计(多态的一种体现)不过看作者的意思好像不是问为什么这么设计,
    而是对于ICustomer customer = new Customer();
    这样的写法耿耿于怀。这个东西如果不放在函数里写而是作为参数,那就好理解了吧。
    例:
    public void doOrder(ICustomer customer) {
        custom.order();
    }
    其实个人觉得这么做就是强调他们属于某个集合,有着共同的行为。
      

  4.   

    lz这是java的基础知识,并不存在什么设计模式的说法。
      

  5.   

    这就是抽象类与接口的使用区别,减少NEW对象实例化。降低耦合度
      

  6.   

    1、创建对象时缺少new关键字
    2、如果修正这个错误后,这个写法符合面向接口编程的原则:
    只暴露接口中定义的行为给外界调用,子类中新增的行为会被隐藏,提高封装性、安全性。
    可以灵活切换子类,如将子类配置到属性文件或xml文件中,避免程序再次编译,提高效率。
      

  7.   

    应该写成ICustomer customer =new Customer();
    用接口来实例类 便于以后管理 程序越大面向接口的优点就越明显
      

  8.   

    设计模式基础中的设计原则:依赖倒置、空值反转、接口隔离都需要接口、抽象类的支持。但是如果是见到直接写成ICustomer customer = new Customer();不考虑上下文的情况下,好像没有什么特别的,也有些多此一举,因为已经将ICustomer与Customer耦合在了一起。或许这只是一种好习惯而已。