------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
面向对象设计把握一个重要的经验:谁拥有数据,谁就对外提供操作这些数据的方法。
用面向对象的方式设计如下情景:
A,”球从绳子的一段移动到了另一端“
分析:
这里有两个对象小球Ball和绳子Rope,首先小球有一个滚动的方法move(),每次滚动它要就要问绳子往哪个方向滚,下一次要滚到哪个点上。绳子的本质是为球的移动提供了方向,所以绳子要有一个指定下一个点的方法nextPoint()。
Rope类的设计:
构造一个绳子需要两个点Point start,Pointend;它有一个方法nextPoint(),通过获取小球的currentPoint,返回给小球一个滚动Point
Ball类的设计:构造一个可以滚动的小球要有一个起始位置point start,它要知道自己的滚动方向,所以需要一个绳子Rope,作为参数传给构造方法,这样小球就与绳子绑定了;它还要一个滚动方法move();
(1)class Rope{
(2) private Point start;
(3) private Point end;
(4) public Rope(Pointstart,Point end){
(5) this.start=start;
(6) this.end=end;
(7) }
(8)
(9) public PointnextPoint(Point currentPoint){
(10) /*通过两点一线的数学公式可以计算出当前点的下一个点,
(11) * 这个细节不属于设计阶段要考虑的问题
(12) * 如果当前点是终止点,则返回null,如果当前点不是线上的点,则抛出异常
(13) **/
(14) }
(15) }
(16) class Ball{
(17) private Rope rope;
(18) private Point currentPoint;
(19) public Ball(Rope rope,Point startPoint){
(20) this.rope=rope;
(21) this.currentPoint=startPoint;
(22) }
(23) public void move(){
(24) currentPoint=rope.nextPoint(currentPoint);
(25) System.out.println("小球移动到了"+currentPoint);
(26) }
(27) }
B,”两块石头磨成一把石刀,石刀可以砍树,砍成木材,木材做成椅子”
此情景中的对象有:Stone,StoneKnife,Tree,Material,Chair
//两块石头被加工成石刀
StoneKnife =KnifeFactory.createKnife(Stonefirst,Stone second)
//石刀把树砍成木材
Material=StoneKnife.cut(tree)
//木材被加工成椅子
Chair=chairFactory.makeChair(material)