A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 陈钦涛 于 2013-10-3 10:51 编辑

张孝祥老师在高新技术讲过用石头加工厂对象中的方法来把石头磨成石刀,石刀中有砍的方法,树木加工厂对象有把树做成椅子的方法。但是有没有其他的设计思路呢?

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

7 个回复

倒序浏览
本帖最后由 hanfei2511 于 2013-10-2 14:50 编辑

我随便想了一个,仅供娱乐啊,嘿嘿:
就定义两个类,一个是刀,一个是树。外加一个枚举。
枚举类定义了刀的材质和材料的相关信息,如石头(价格,来源,加工厂商名),铁(价格,来源,加工厂商名),青铜(价格,来源,加工厂商名),塑料(价格,来源,加工厂商名)……(括号中内容在枚举的构造方法中定义)
刀类呢,有一个材质的属性,作为参数传递给刀类的构造方法,即获取某种材质的刀。然后刀类有一个方法,叫砍,它的参数是一个对象,需要我们在需要调用时传递,如传递一个树对象,猎物对象,食物对象等等。
然后就是树这个类,因为树的作用很多,而且不同种类的树会偏向于某种实际用途,所以可以把它做成一个抽象类,其中有例如getPaper(Object Obj),getChair(Object Obj),getCup(Object Obj),getFruit(Object Obj)等等方法,然后搞一个适配器类,实际用的时候通过继承,然后按自己的需要传递特定的参数对象,调用某种相应的方法,获得需要的产品即可。
当然还有其他解决方法呀,希望大家提意见。



评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
hanfei2511 发表于 2013-10-2 14:47
我随便想了一个,仅供娱乐啊,嘿嘿:
就定义两个类,一个是刀,一个是树。外加一个枚举。
枚举类定义了刀的 ...

随便起来还蛮厉害的。在抽象类树中,getChair(Object obj)obj是工具么,把石刀传给树,树有一个把自己做成木材的方法,还是传递要把树做成什么样的要求?张老师认为把树做成椅子的方法不能是在树身上,这个不符合生活实际,这个对,但是用面向对象思想来看,树有把自己做成椅子的功能貌似说得通,就像门有把自己给关闭的功能一样。就是树做成椅子后树这个对象会改变,怎么改变,当然不可以重新new一个树对象来,那就是其他的树了?你的思路提醒了我,树这个类貌似可以定义出内部类,例如,树枝,树干内部类等等,然后做椅子,是想把树干还是树枝做成椅子...
回复 使用道具 举报
我想了一个:人在黑板上画圆,
需要定义三个类,人,黑板、圆
人类定义个方法调用黑板画圆的方法, 该方法传递一个黑板类型的参数,在黑板类中定义一个方法画圆的方法调用画圆的过程,该方法传递一个圆类型参数,调用画圆这个过程, 画圆这个过程是圆所操作的, 那么在圆类定义个画圆的过程的方法。, 在画圆的过程中用到,圆心和半径,圆心和半径这两个数据都是圆身上的。因此在圆类中定义一个常量3.1415926为圆周率, 一个成员变量为半径, 然后把半径作为参数传递给圆类的构造函数中。人对象只有调用自己的方法,就可以实现画圆的过程,  这是我个人理解,总结的不好希望大家给意见
回复 使用道具 举报
hanfei2511 发表于 2013-10-2 14:47
我随便想了一个,仅供娱乐啊,嘿嘿:
就定义两个类,一个是刀,一个是树。外加一个枚举。
枚举类定义了刀的 ...

看来是个高手哦,你是云计算还是安卓的,求认识。我是云计算六期的。
回复 使用道具 举报
天地有我 发表于 2013-10-2 18:31
看来是个高手哦,你是云计算还是安卓的,求认识。我是云计算六期的。

我也是报的云计算六期,等10月8号的名单呢,所以还不确定录取,其实我水平也一般啦,嘿嘿。
回复 使用道具 举报

石头是一个抽象类,石刀是石头的子类,复写abstractMethod:action,也就是砍的动作,(这里我将父类型定义为抽象类,是因为,石头是一类大的事物,从石头演化出来的各种子类都是有他们自己的用处也就是action(动作)),然后树做成椅子这是树的行为,至于用刀做成椅子这也涉及到action这个方法,树要做成椅子,树可以做成各种奇奇怪怪的东西,这些东西不能定义,但是都属于树这类事物,所以有树木作为父类型来演化出各种以树木为原材料的工艺品(譬如船,桌子,木杯子,但是不同的木制品有不同的功能和属性)这类都是树木的多种形态的表现形式,但是做成工艺品之后的树木不再有以前它应该有的属性,譬如颜色,年轮,粗细,这些都是在树木被砍了之后被final了,所以我使用接口来描述树木,接口中的方法必须要被实现,并且所以成员变量都是public static final修饰的,方法全是抽象的,所以必须要被复写,这个时候我们可以用适配器模式来设计以后我们想要的各种子类想要有的效果。
回复 使用道具 举报
hanfei2511 发表于 2013-10-2 19:30
我也是报的云计算六期,等10月8号的名单呢,所以还不确定录取,其实我水平也一般啦,嘿嘿。
...

你是女生啊、我面试是上个月9号面试,二十四号分配的名额。其实我就是个水货,能力很低。交个朋友嘛,你应该过得到、到时到黑马就是同学了。
我QQ: 269078025  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马