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