代码写成这样,有什么用?

vincevincevincevince 2010-10-30 08:01:23
ICustomer 是一个接口
Customer 是一个类
Customer已经实现ICustomer接口了

下面代码那样写是什么意思?有什么用?
ICustomer customer = Customer();
...全文
396 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
Java 涛哥 2010-11-03
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 liqi_wj 的回复:]
引用 11 楼 ke922 的回复:
这样写提高了代码的重用性,程序更容易维护和扩展。。
楼主多去了解设计模式吧。。
[/Quote]

...
  • 打赏
  • 举报
回复
结账了。谢谢。。。
  • 打赏
  • 举报
回复
如果接口是来源于实现类,那么就是为了接口而接口的代码!这样的接口有与没有是没有任何区别的!

一般来说,接口一经定义就不允许再做任何修改!
ahopedog 2010-11-02
  • 打赏
  • 举报
回复
设计模式基础中的设计原则:依赖倒置、空值反转、接口隔离都需要接口、抽象类的支持。

但是如果是见到直接写成ICustomer customer = new Customer();不考虑上下文的情况下,好像没有什么特别的,也有些多此一举,因为已经将ICustomer与Customer耦合在了一起。或许这只是一种好习惯而已。



_LiuHui 2010-11-02
  • 打赏
  • 举报
回复
居然看见了 昨天的帖子。。哇哈哈。、
lk198186 2010-11-02
  • 打赏
  • 举报
回复
代码写到一定程度就知道了,个人认为设计模式是从工程角度看待问题的
ybh51java 2010-11-02
  • 打赏
  • 举报
回复
1、创建对象时缺少new关键字
2、如果修正这个错误后,这个写法符合面向接口编程的原则:
只暴露接口中定义的行为给外界调用,子类中新增的行为会被隐藏,提高封装性、安全性。
可以灵活切换子类,如将子类配置到属性文件或xml文件中,避免程序再次编译,提高效率。

liuzhenlzlz 2010-11-02
  • 打赏
  • 举报
回复
同上 面向接口
shapan1989 2010-11-02
  • 打赏
  • 举报
回复
应该写成ICustomer customer =new Customer();
用接口来实例类 便于以后管理 程序越大面向接口的优点就越明显
ousyuryu 2010-11-01
  • 打赏
  • 举报
回复
这就是面向对象语言设计(多态的一种体现)

不过看作者的意思好像不是问为什么这么设计,
而是对于ICustomer customer = new Customer();
这样的写法耿耿于怀。

这个东西如果不放在函数里写而是作为参数,那就好理解了吧。
例:
public void doOrder(ICustomer customer) {
custom.order();
}
其实个人觉得这么做就是强调他们属于某个集合,有着共同的行为。






_LiuHui 2010-11-01
  • 打赏
  • 举报
回复
面向接口 编程 主要是 多态
kingljx 2010-11-01
  • 打赏
  • 举报
回复
例如这种情况下使用面向接口的方式就会方便很多.
做一个控制一些对象的管理器,对象可能是一个活动的角色,一个AI控制的NPC,或者一个自由移动的宠物,
他们都可以实现自同一个接口IChar
管理器中可以直接HashMap<Integer, IChar>来存储所有这些对象,当需要对某个对象操作时候都可以从这一个哈希表中处理,不用给每种做独立的集合了
m690192206 2010-11-01
  • 打赏
  • 举报
回复
你的接口定义一个对象,当然必须的用他的实现类来实列话
dinghun8leech 2010-11-01
  • 打赏
  • 举报
回复
ICustomer customer = new Customer();
这样写,你只能把Customer当做ICustomer服务的提供者,那么你只能使用ICustomer声明的服务。
Customer customer = new Customer();
这样写,那么你就能使用Customer类中所有的公开服务,此时你把它当做Customer来用。
区别其实没啥,这两种写法都行,不存在什么设计、重用、面向接口之类的东西,这些东西是在设计结构时候定的,跟这里如何实例化一个类没有什么关系。比如你声明了一个ArrayList list = new ArrayList();你照样能把这个对象引用丢给参数列表类型为List的方法。
liqi_wj 2010-11-01
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 ke922 的回复:]
这样写提高了代码的重用性,程序更容易维护和扩展。。
楼主多去了解设计模式吧。。
[/Quote]

+1
ke922 2010-11-01
  • 打赏
  • 举报
回复
这样写提高了代码的重用性,程序更容易维护和扩展。。
楼主多去了解设计模式吧。。
leavin521 2010-11-01
  • 打赏
  • 举报
回复
确实少些了个new
zn85600301 2010-11-01
  • 打赏
  • 举报
回复
貌似 少写了new 吧
「已注销」 2010-11-01
  • 打赏
  • 举报
回复
面向抽象编程
rmhuang9 2010-11-01
  • 打赏
  • 举报
回复
你只要记住“面向接口,好” 就行了 1年前我在学校的时候老师是这样跟我说的
加载更多回复(12)

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧