学员的两个面向对象的面试题,用面向对象的方式设计如下情景。
“两块石头磨成一把石刀,石刀可以砍树,砍成木材,木材做成椅子”,
* 石头-->(通过KnifeFactory)-->石刀
* 树-->(通过StoneKnife的cut方法)-->木材-->(ChairFactory的makeChair方法)-->椅子
StoneKnife = KnifeFactory.createKnife(Stone first,Stone second);//KnifeFactory具有制作石刀的方法(createKnife),两块石头磨成石刀
material = StoneKnife.cut(tree);//石刀具有砍树的方法
Chair chair = ChairFactory.makeChair(material);//ChairFactory具有制作椅子的方法makeChair
“球从一根绳子的一段移动到了另一端”,
class Rope {
private Point start;
private Point end;
public Rope(Point start, Point end) {
this.start = start;
this.end=end;
}
public Point nextPoint(Point currentPoint){
/*
通过两点一线的数学公式可以计算出当前点的下一个点, 这个细节在设计阶段可以不考虑的问题。
如果当前点是终止点,则返回null;如果当前点不是线上的店,则抛出异常。
*/
}
}
class Ball{
private Rope rope;
private Point currentPoint;
public Ball(Rope rope,startPoint){
this.rope=rope;
this.currentPoint=startPoint;
}
public void move(){
currentPoint=rope.nextPoint(currentPoint);
System.out.println("小球移动到"+currentPoint);
}
} |