黑马程序员—JAVA高新技术之面向对象的设计思想

来源:互联网 发布:keil是什么软件 编辑:程序博客网 时间:2024/06/09 16:14

张孝祥老师面向对象的设计思想

    

    谁拥有数据,谁就对外提供操作这些数据的方法, 谁具有这项属性,谁就提供操作这些属性的方法。

经典案例分析:

1、人在黑板上画圆

这个案例有三个对象:Person,Blackboard,Circle 有一个动作画圆,画圆这个动作可以封装成一个方法draw(),那么,这个draw()方法应该封装在那个类中呢?我们知道,要画圆就必须知道圆心和半径,也就是draw()方法需要使用圆心(x,y)和半径radius这两个属性,而这两个属性正是圆的两个属性,所以方法draw()就应该封装在圆Circle类里面。 draw() { (x,y)、radius }

 

2、列车司机刹车

    首先我们要知道车子本身就有与刹车有关的一些特性,假如车子没有刹车相关的属性,比如离合器之类的等等,那么车子不可能被刹下来。只有车辆自己才知道如何把自己停下来,所以刹车这个方法就应该封装在车子这个类里面,列车司机只是调用了车子的刹方法。

 

3、关门

    类似刹车,门本身就有比如旋转轴等与关相关的属性,所以关这个方法就应该封装在门这个类里面,我只是调用了门的关方法。逆向思维,假如我们把关封装在“我”这个类里面,那我就可以调用“关”的方法去关任何与我有关的东西,然而和我们有关系的东西并不是所有的都能关,这显然不合理。

 

4、“两块石头磨成一把石刀,石刀可以砍树,砍成木材,木材做成椅子”

有哪些显式对象:Stone、Stoneknife、Tree、Material、Chair 两块石头-->一把石刀 ==> 从这里我们就应该想到两块石头应该作为参数传进去,返回的结果是石刀,所以还需要一个用石头作原料制作石刀的类,这里是KnifeFactory,它提供一个方法createKnife(Stone first, Stone second)返回结果是StoneKnife。 石刀把树看成木材 ==> 这里我们应该想到StoneKnife需要提供一个方法cut(Tree)返回值是Material 木材-->椅子 ==> 需要额外增加个椅子工厂类ChairFactory提供制作椅子的方法makeChair(Material)返回结果是Chair Stone KnifeFactory StoneKnife = KnifeFactory.createKnife(Stone first, Stone second) Tree Material = StoneKinfe.cut(Tree) ChairFactory Chair = ChairFactory.makeChair(Material)


0 0
原创粉丝点击