java项目的经验不是很多,虽然这几年一直关注,但始终不理解接口的作用,大家能否举个项目中的例子来阐述必须用接口,或者不用接口就特别麻烦?
我也搜了论坛里的其他帖子,如以下的回复↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
interface test{
void go();
}
class testaaa implements test{
public void go()
{
System.out.println("exe");
}
}
-------------------
class TestFactory {
...
public test getTest(){
....
return testaaa;
}
}
--------------------------------------
example.java
test t = TestFactory.getTest();
t.go();
如果testaaa发声变化或者给作者修改,对于这部分代码,可能永远都不需要修改。
甚至可以不必知道有testaaa这个东东的存在。
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑比如我写可能就是class testaaa {
public void go()
{
System.out.println("exe");
}
testaaa t = new testaaa
t.go(); 这样写有什么不妥吗?如果有什么变化也就是修改这个类testaaa,和上面例子中修改的地方一样,我觉得这么写简单,清晰。至于testaaa 的go是怎么写的,我也不需要考虑那么多,拿来用不就可以了吗?
我也搜了论坛里的其他帖子,如以下的回复↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
interface test{
void go();
}
class testaaa implements test{
public void go()
{
System.out.println("exe");
}
}
-------------------
class TestFactory {
...
public test getTest(){
....
return testaaa;
}
}
--------------------------------------
example.java
test t = TestFactory.getTest();
t.go();
如果testaaa发声变化或者给作者修改,对于这部分代码,可能永远都不需要修改。
甚至可以不必知道有testaaa这个东东的存在。
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑比如我写可能就是class testaaa {
public void go()
{
System.out.println("exe");
}
testaaa t = new testaaa
t.go(); 这样写有什么不妥吗?如果有什么变化也就是修改这个类testaaa,和上面例子中修改的地方一样,我觉得这么写简单,清晰。至于testaaa 的go是怎么写的,我也不需要考虑那么多,拿来用不就可以了吗?
针对这个,完全可以事先定义一个类,内容可以随意,以供大家用,而且这样的类几乎都是先开发的吧。
所以不会存在你说的这种情况,或者说就为了解决这种问题弄出一个接口吗?
>>将来你可能由于某种原因,不用testaaa做为类名了,调用了你的testaaa类中的go()方法的同事也不需要对他们的代码做任何修改。接口test在这里起解耦的作用,使得你和你…
有这种情况吗?类名还需要改?真的,我只碰到过重做的项目,这样共通的类几乎没有重做的。
既然有不同的go(),每个go()也就没有什么共性了,要我做也就不把它作为一个公共类了,大伙自己写自己的类和自己的方法呗?
像你说的难道这个时候用接口就方便吗?
【接口名】 【对象名】=new 【实现接口的类】
说到底还点指定到我的类,
用到接口的时候不也是点指定到我自己的类上?按你这么解释,用了接口感觉无非就是统一个方法名称而已。难道就为了这个规范?
层次的人干活的时候,开发人员去实现,<<请问,作为一个大的软件开发团队中的一员,你是希望你的代码暴露的越多越好,还是越少越好?当然是越少越好,因为这样就意味着你的同事对你的代码的<<依赖性越小,也越便于你自如地组织你的内部结构。private成员可以隐藏在类中,而工厂模式和接口则更进一步,让你的类隐藏在工厂中,仅将接口暴露给<<使用者。现在,你就不仅可以在一个类的内部进行结构重整,更可以在工厂内进行大幅的调整,而不影响工厂的使用者。
没能理解你说的,我估计可能就是因为我没理解你的话所以才搞不懂接口的作用,如果你能看到这个回复,再辛苦多打几个字,谢了。
1、代码暴露
这个该怎么理解呢?我那么做怎么就暴露了呢?
对于依赖性,其实我的想法很简单,能够共通的东西就做成共同的类,大家直接调用就OK,我把功能,参数,返回值什么的告诉你,你拿过去用就行。<<关于你提到的游戏角色
恩,结合你的列子,能够理解了。不过单单就这个例子而言,既然游戏角色升级而且还要保存升级前和升级后的,那么也不需要继承出来一个新的类,修改原来的类也应该能实现,也就是一个类里包含两个版本的角色信息。