小弟最近自学java,遇到小问题求大神指点
有一游戏类game,类中has a 一个目标实例对象target,target中有一个实例对象int数组代表位置。 游戏流程为,用户输入一个数组,判断是否击中目标。问题来了,我在game中写了一个方法isFire,参数为用户输入的值,但是在实现时,我想到了两种解决办法。虽然都可以正常运行使用,但我总觉得是有区别的,但自己又说不清楚。望众大神指点一下,小弟不胜感激。
小弟的方法一:使用target中的get方法,取得target中的数组,然后与传入的数字比较,最后返回结果。
小弟的方法二:将具体的逻辑实现推给target,在target中实现一个比较方法,参数为int,逻辑为将int与 target的数组比较,然后返回结果。game中的方法isFire直接调用target中的比较方法。
哪个方法好点,区别在哪里啊?求大神指点。一个同学告诉我第二种才是面向对象是不是真的啊?
--------------------编程问答-------------------- 我的想法。
面向对象,首先要弄清楚有什么对象,对象有什么属性,有行为
首先游戏game,对象有什么属性,什么方法。
根据你的描述,geme有一个目标target,当然肯定有个play方法。
目标有一个数组属性。从你描述,目标应该只有提供数组的方法。
还有输入。目标应该没有输入功能,游戏也没。
只有player才有,玩家才有。
那么应该有个玩家对象。玩家有个输入方法。还要有个game对象,玩什么游戏。
你要的判断是否击中目标,这个应该由game对象来完成。这个流程就是游戏的核心。
也game才有资格。也就是play方法。但是他需要玩家传入一个输入值。
现在清楚了。
Target int[] arr;
public int[] getArr();
Game Target target;
private isFire();
public void play(input){isFire(target.getArr, input)//做判断}
Player Game game;
private int input();
game.play(input);
--------------------编程问答--------------------
谢谢2楼大神 ,讲的真好,可是小弟还有一个地方不明白,(private isFire();
public void play(input){isFire(target.getArr, input)//做判断}) 为何这里要做一个private的isFire()方法与play()方法分开?都写在play()方法里不一样吗? 大神告诉我呗,谢谢 --------------------编程问答--------------------
方法的规则,一个方法做一件事。不要在乎方法多。
在说,play方法的规则我可能会变化,这样我就改下调用就好了。
深层次考虑,如果现在是否击中的判断改规则了,
那么把game 抽象化,这时game是个抽象类。照样提供一个public 的play方法。还提供一个受保护的isFire()抽象方法方法。play方法还是调用isFire();
这时写个判断击中这个具体游戏的实现类,继承game类,实现isFire()方法。
这样完成后,如果后续要加规则,我不用改原来的代码,只要加一个具体实现类,继承game,实现isFire()方法。就可以完成扩展。 --------------------编程问答--------------------
我的想法。
面向对象,首先要弄清楚有什么对象,对象有什么属性,有行为
首先游戏game,对象有什么属性,什么方法。
根据你的描述,geme有一个目标target,当然肯定有个play方法。
目标有一个数组属性。从你描述,目标应该只有提供数组的方法。
还有输入。目标应该没有输入功能,游戏也没。
只有player才有,玩家才有。
那么应该有个玩家对象。玩家有个输入方法。还要有个game对象,玩什么游戏。
你要的判断是否击中目标,这个应该由game对象来完成。这个流程就是游戏的核心。
也game才有资格。也就是play方法。但是他需要玩家传入一个输入值。
现在清楚了。
Target int[] arr;
public int[] getArr();
Game Target target;
private isFire();
public void play(input){isFire(target.getArr, input)//做判断}
Player Game game;
private int input();
game.play(input);
谢谢2楼大神 ,讲的真好,可是小弟还有一个地方不明白,(private isFire();
public void play(input){isFire(target.getArr, input)//做判断}) 为何这里要做一个private的isFire()方法与play()方法分开?都写在play()方法里不一样吗? 大神告诉我呗,谢谢
方法的规则,一个方法做一件事。不要在乎方法多。
在说,play方法的规则我可能会变化,这样我就改下调用就好了。
深层次考虑,如果现在是否击中的判断改规则了,
那么把game 抽象化,这时game是个抽象类。照样提供一个public 的play方法。还提供一个受保护的isFire()抽象方法方法。play方法还是调用isFire();
这时写个判断击中这个具体游戏的实现类,继承game类,实现isFire()方法。
这样完成后,如果后续要加规则,我不用改原来的代码,只要加一个具体实现类,继承game,实现isFire()方法。就可以完成扩展。
谢谢大神,真给力 --------------------编程问答-------------------- 早就不做开发了,转行修打印机 修电脑去了 --------------------编程问答--------------------
早就不做开发了,转行修打印机 修电脑去了
吃不饱啊 --------------------编程问答-------------------- 我猜是海盗船游戏 --------------------编程问答-------------------- 坦克大战。。。 --------------------编程问答-------------------- 7楼基本猜中了 , 其实是headfirst java 里的例子 ,哈哈。 可是在这一步调用上,我的想法竟然和书上的不一样。。 是不是我又面向过程了捏。。
补充:Java , Web 开发