谁拥有数据 谁就对外提供操作这些数据的方法!
eg:
1. 汽车 马路
汽车看到自己所在的录像对应的红绿灯就穿过路口? 不是,还需要看它前面是不是有车,那么,看它前面是否有车,该问哪个对象呢?
该问路,路中存储着车的集合,显然路上就应该有增加车辆和减少车辆的方法。不是汽车自己给自己减少了。
2.人在黑板画圆(两个对象:人, 黑板)
问题:现在有一个画圆的动作 这是那个对象上面的方法?
答:画圆用到了 圆心和半径 要操作这两个数据 那么谁有这些东西 肯定是 黑板有 所以画圆的方法是圆提供的
3.人在开火车(两个对象:人,火车)
问题 : 现在有一个刹车的动作 这是哪个对象上面的方法?
答:火车 用到了火车刹车的功能。因为人只是给火车一个信号 那么 火车就去熄火 刹车动作是列车内部的
4.售票员统计售货小票上面的总金额(两个对象:人, 售货小票)
问题:统计票据金额这个动作 这是那个对象上面的方法?
答:票据 因为商品价格的多少是装在售货小票里面的 ,人只不过是去调用了一个票据对象上面getTotalMoney()方法 这个方法是票据提供的。
5.人锁门(两个对象:人 门)
问题:锁门的动作是你还是门?
答:门 。因为 人只是调用了门上锁的方法 是门自己锁上的
**************************************************************
请用面向对象的方式设计如下情景!:
1.两块石头磨成一把石刀,石刀可以砍树,砍成木材,木材可以做成椅子。
分析:
Stone 身上应该有变成石刀的方法? 肯的没有 因为如果是这样的话 把自己逗弄没了,只能是别人把石头弄没了 怎么能是自己把自己弄没了呢?
结果:StoneKnife = KnifeFactory.createKnife(first stone,second stone)
StoneKnife
tree 木材变成 材料
结果 material=StoneKnife.cut(tree);
material 材料变成椅子
结果 chair=chairFactory.makeChairz(material);
chair
2.小球从一个生子的一端移动到另一端。
分析:两个对象 小球和绳子
绳子是干什么用的? 本质:为球的移动提供了指引的方向 小球有一个滚动的方法,他怎么知道往哪个方向滚? 他去问绳子 哥们 nextPoint()在哪?
import java.awt.Point;
public class Rope {//绳子
private Point start;
private Point end;
public Rope(Point start, Point end) {
super();
this.start = start;
this.end = end;
}
//获取下一个点的方法
public Point getNextPoint(){
}
}
//球类
import java.awt.Point;
public class Ball {
private Rope rope;//小球依赖绳子 把绳子作为属性
private Point curretnPoing;
public Ball(Rope rope, Point curretnPoing) {
super();
this.rope = rope;
this.curretnPoing = curretnPoing;
}
public void move() {
curretnPoing = rope.getNextPoint();
System.out.println("小球移动到了" + curretnPoing);
}
}