黑马程序员 面试技巧<一>--->面向对象的思想示例

-----------android培训java培训、java学习型技术博客、期待与您交流! ------------


第一节   浅析面向对象思想

一、面向对象的重要经验:

记住一点:谁拥有数据,书就是对外提供这些数据的方法。

二、举例:

1、人在黑板上画圈:

指挥者:人,发出画的信号,

执行者:圈,它是主体对象,进行对自身的画的方法的操作

1)这里的对象是圈,人只是一个指挥者,黑板是一个载体。

2)圈拥有圆心和半径,它有画的方法。

2、列车司机刹车:

指挥者:人,发出停车的信号--->给车一个踩刹车的外力

执行者:列车,它是主体对象,进行对自身进行刹车的方法。

列车知道如何进行操作和控制,让车停下来

3、售货员统计售货小票的金额:

指挥者:售货员,只是最终得到一个结果,并没有获取小票上的金额的方法

执行者:小票,它是主体对象,自身有获取金额的方法。

4、人关门:

指挥者:人,给门发出关的信号

执行者:门,它是主体对象,自身知道如何转动门轴,弹簧等将门关上。

 

第二节  面试的具体示例

一、示例一:

需求:球从一根绳子的一段移动到了另一端

分析:

球:有移动的方法,但是需要知道移动到下一个位置的点,这需要绳子提供

绳子:有获取当前点的方法,可以作为球的参数,让球知道下个点的位置

获取当前位置,可以使用计时器,时刻变化的。

具体代码(只做简单演示):

 

public class RollTest {
	public static void main(String[] args) {
		//......
	}
}
//创建绳子类
class Rope{
	//定义起始点和终止点
	private Point startPoint;
	private Point endPoint;
	public Rope(Point startPoint,Point endPoint){
		this.startPoint = startPoint;
		this.endPoint = endPoint;
	}
	public Point getStartPoint() {
		return startPoint;
	}
	public void setStartPoint(Point startPoint) {
		this.startPoint = startPoint;
	}
	//创建获取下一个点的方法
	public Point nextPoint(Point currentPoint){
		/*
		 * 通过两点一线的数学公式可以计算出当前点的下一个点,
		 * 这个细节需要用到数学函数, 不属于设计阶段要考虑的问题
		 * 如果当前点是终止点,则返回null,
		 * 若当前点不是线上的点,则抛异常
		 */
		if(currentPoint==endPoint)
			return null;
		return currentPoint;
	}
}

//创建Ball类
class Ball{
	//定义操作Ball的绳子rope,以及当前点
	private Rope rope;
	private Point currentPoint;
	public Ball(Rope rope, Point startPoint){
		this.rope = rope;
		this.currentPoint =startPoint;
	}
	
	public Rope getRope() {
		return rope;
	}

	public Point getCurrentPoint() {
		return currentPoint;
	}
	//创建小球移动的方法
	public void move(){
		currentPoint = rope.nextPoint(currentPoint);
		System.out.println("小球移动到了" + currentPoint);
	}
}

二、示例二

需求:两块石头磨成一把石刀,石刀可以砍树,砍成木材,木材做成椅子

分析:

这里有两个是原材料,不作为操作方法的对象,而作为被操作的对象,

即石头和树作为材料进行加工,而操作这两个对象的就是工厂,将其加工成为石刀和椅子

1、这里将石头磨成石刀,石头并不操作的对象,而是工厂

2、石刀是对象,有砍树的方法

3、加工椅子的工厂将树加工成为椅子

 

具体代码:

 

public class StoneknifeTest {
	public static void main(String[] args) {
		//......
	}
}
//创建加工chair的类
class ChairFactory{
	private String trees;
	public ChairFactory(String trees) {
		this.trees = trees;
	}
	public String creat(String trees){
		return "好多的椅子啊";
	}
}
//创建加工石头的类
class KnifeFactory{
	private KnifeFactory kf;
	private Stone stones;
	private String stoneKnife;
	public KnifeFactory(Stone stones){
		this.stones = stones;
	}
	//创建生产石刀的方法
	public StoneKnife creat(Stone firstStone,Stone secondStone){		
		StoneKnife sk = null;
		//creat stoneKnife
		//new StoneKnife(firstStone)+ " creat " +  new StoneKnife(secondStone);
		return sk;
	}
}
//创建Stone类
class Stone{
	private Stone stone;
	public Stone(Stone stone){
		this.stone = stone;
	}
}
//创建StoneKnife类
class StoneKnife {
	public StoneKnife() {}
	//创建砍树的方法
	public Tree cutTree(StoneKnife sk,String tree){
		Tree trees = null;
		//cutTree...
		return trees;
	}
}
//创建树木类
class Tree{
	private Tree tree;
	public Tree(Tree tree){
		this.tree = tree;
	}
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值