看了张老师的视频--------两个有趣的面向对象题目

在看《交通灯管理系统》的视频,其中张孝祥老师讲到了两个面向对象的题目。觉得很有趣,特此记一笔。

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;
	}
}

我居然没有想到工厂.....真是失误啊..................................

仔细一分析,功力立见高下..................看来,真的还得努力啊.................................

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值