面试技巧--->面向对象的思想示例


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

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

二、举例:

1、人在黑板上画圈:

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

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

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

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

2、列车司机刹车:

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

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

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

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

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

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

4、人关门:

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

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

 

第二节  面试的具体示例

一、示例一:

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

分析:

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

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

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

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

 

[java] view plaincopyprint?
  1. public class RollTest {  
  2.     public static void main(String[] args) {  
  3.         //......  
  4.     }  
  5. }  
  6. //创建绳子类  
  7. class Rope{  
  8.     //定义起始点和终止点  
  9.     private Point startPoint;  
  10.     private Point endPoint;  
  11.     public Rope(Point startPoint,Point endPoint){  
  12.         this.startPoint = startPoint;  
  13.         this.endPoint = endPoint;  
  14.     }  
  15.     public Point getStartPoint() {  
  16.         return startPoint;  
  17.     }  
  18.     public void setStartPoint(Point startPoint) {  
  19.         this.startPoint = startPoint;  
  20.     }  
  21.     //创建获取下一个点的方法  
  22.     public Point nextPoint(Point currentPoint){  
  23.         /* 
  24.          * 通过两点一线的数学公式可以计算出当前点的下一个点, 
  25.          * 这个细节需要用到数学函数, 不属于设计阶段要考虑的问题 
  26.          * 如果当前点是终止点,则返回null, 
  27.          * 若当前点不是线上的点,则抛异常 
  28.          */  
  29.         if(currentPoint==endPoint)  
  30.             return null;  
  31.         return currentPoint;  
  32.     }  
  33. }  
  34.   
  35. //创建Ball类  
  36. class Ball{  
  37.     //定义操作Ball的绳子rope,以及当前点  
  38.     private Rope rope;  
  39.     private Point currentPoint;  
  40.     public Ball(Rope rope, Point startPoint){  
  41.         this.rope = rope;  
  42.         this.currentPoint =startPoint;  
  43.     }  
  44.       
  45.     public Rope getRope() {  
  46.         return rope;  
  47.     }  
  48.   
  49.     public Point getCurrentPoint() {  
  50.         return currentPoint;  
  51.     }  
  52.     //创建小球移动的方法  
  53.     public void move(){  
  54.         currentPoint = rope.nextPoint(currentPoint);  
  55.         System.out.println("小球移动到了" + currentPoint);  
  56.     }  
  57. }  

二、示例二

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

分析:

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

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

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

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

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

 

具体代码:

 

[java] view plaincopyprint?
  1. public class StoneknifeTest {  
  2.     public static void main(String[] args) {  
  3.         //......  
  4.     }  
  5. }  
  6. //创建加工chair的类  
  7. class ChairFactory{  
  8.     private String trees;  
  9.     public ChairFactory(String trees) {  
  10.         this.trees = trees;  
  11.     }  
  12.     public String creat(String trees){  
  13.         return "好多的椅子啊";  
  14.     }  
  15. }  
  16. //创建加工石头的类  
  17. class KnifeFactory{  
  18.     private KnifeFactory kf;  
  19.     private Stone stones;  
  20.     private String stoneKnife;  
  21.     public KnifeFactory(Stone stones){  
  22.         this.stones = stones;  
  23.     }  
  24.     //创建生产石刀的方法  
  25.     public StoneKnife creat(Stone firstStone,Stone secondStone){          
  26.         StoneKnife sk = null;  
  27.         //creat stoneKnife  
  28.         //new StoneKnife(firstStone)+ " creat " +  new StoneKnife(secondStone);  
  29.         return sk;  
  30.     }  
  31. }  
  32. //创建Stone类  
  33. class Stone{  
  34.     private Stone stone;  
  35.     public Stone(Stone stone){  
  36.         this.stone = stone;  
  37.     }  
  38. }  
  39. //创建StoneKnife类  
  40. class StoneKnife {  
  41.     public StoneKnife() {}  
  42.     //创建砍树的方法  
  43.     public Tree cutTree(StoneKnife sk,String tree){  
  44.         Tree trees = null;  
  45.         //cutTree...  
  46.         return trees;  
  47.     }  
  48. }  
  49. //创建树木类  
  50. class Tree{  
  51.     private Tree tree;  
  52.     public Tree(Tree tree){  
  53.         this.tree = tree;  
  54.     }  
  55. }  

你可能感兴趣的:(面向对象思想,java面向对象思想,面向对象经典例题)