在看《交通灯管理系统》的视频,其中张孝祥老师讲到了两个面向对象的题目。觉得很有趣,特此记一笔。
1.小球从绳子的一端滑动到另一端
我看到此题的想法:
class Line{
private Point startPoint;
private Point endPoint;
public Line(){
//初始化startPoint,endPoint,此处不写
}
public Point getStartPoint() {
return startPoint;
}
public void setStartPoint(Point startPoint) {
this.startPoint = startPoint;
}
public Point getEndPoint() {
return endPoint;
}
public void setEndPoint(Point endPoint) {
this.endPoint = endPoint;
}
}
class Ball{
private Point myPoint;
private Line line;
public Ball()
{
line=new Line();
myPoint=line.getStartPoint();
System.out.println("小球的起始坐标为:("+myPoint.getX()+","+myPoint.getY()+")");
}
public void move()
{
myPoint=line.getEndPoint();
System.out.println("小球的终止坐标为:("+myPoint.getX()+","+myPoint.getY()+")");
System.out.println("小球成功从绳子一端移动到另一端");
}
}
张老师给出的解答为:
class Line{
private Point startPoint;
private Point endPoint;
public Line(){
//初始化startPoint,endPoint,此处不写
}
public Point getStartPoint() {
return startPoint;
}
public void setStartPoint(Point startPoint) {
this.startPoint = startPoint;
}
public Point getEndPoint() {
return endPoint;
}
public void setEndPoint(Point endPoint) {
this.endPoint = endPoint;
}
public Point nextPoint()
{
//计算下一个移动点,此处未写
Point nextPoint=null;
return nextPoint;
}
}
class Ball{
private Point myPoint;
private Line line;
public Ball()
{
line=new Line();
myPoint=line.getStartPoint();
System.out.println("小球的起始坐标为:("+myPoint.getX()+","+myPoint.getY()+")");
}
public void move()
{
myPoint=line.nextPoint();
}
}
张老师的解答更体现了“移动”这样一个动作,觉得比较好。当然如果要严格的写,应该是这样的:
class Line{
private Point startPoint;
private Point endPoint;
public Line(){
//初始化startPoint,endPoint,此处不写
}
public Point getStartPoint() {
return startPoint;
}
public void setStartPoint(Point startPoint) {
this.startPoint = startPoint;
}
public Point getEndPoint() {
return endPoint;
}
public void setEndPoint(Point endPoint) {
this.endPoint = endPoint;
}
public Point nextPoint()
{
//计算下一个移动点,此处未写
Point nextPoint=null;
return nextPoint;
}
}
class Ball{
private Point myPoint;
private Line line;
private Timer timer=null;
public Ball()
{
line=new Line();
timer=new Timer();
myPoint=line.getStartPoint();
System.out.println("小球的起始坐标为:("+myPoint.getX()+","+myPoint.getY()+")");
timer.schedule(new TimerTask(){
@Override
public void run() {
// TODO Auto-generated method stub
move();
}
},1000,1000);
}
public void move()
{
myPoint=line.nextPoint();
}
}
2.两块石头磨成石刀,石刀可以砍树,砍树成为木材,木材可以做椅子
我看到此题的想法为:
//石头
class Stone{}
//木材
class Wood{}
//树
class Tree{}
//石刀
class StoneKnife{
//利用石块制造石刀
public StoneKnife makeStoneKnife(Stone[] stoneArr){
return null;
}
//砍树
public Wood[] chap(Tree tree)
{
return null;
}
}
//椅子
class Chair{
//制造椅子
public Chair makeChair(Wood[] woods){
return null;
}
}
可以看到,写得非常不好。石刀和椅子分别担负起了生产自己的方法。
张老师的解答为:
//石头
class Stone{}
//木材
class Wood{}
//树
class Tree{}
//椅子
class Chair{}
//石刀
class StoneKnife{
//砍树
public Wood[] chap(Tree tree)
{
return null;
}
}
//石刀工厂
class StoneKnifeFactory{
//制造石刀
public StoneKnife makeStoneKnife(Stone[] stones){
return null;
}
}
//椅子工厂
class ChairFactory{
//制造椅子
public Chair makeChair(Wood[] woods){
return null;
}
}
我居然没有想到工厂.....真是失误啊..................................
仔细一分析,功力立见高下..................看来,真的还得努力啊.................................