一道很有趣的题

yilexxy 2010-07-07 12:28:58
题目:假设是原始社会,有石头,2块石头互磨可以变成石刀,石刀可以去砍木头,木头被砍成木材,木材可以组成椅子,请你用oo的 思想把这些事物和他们之间的关系表达出来,但是要考虑到以后可能我会增加以下几点: "1.有可能我还想让石刀去砍椅子,把椅子砍成木材,2.可能我还想让石头增加关系,例如互相砸,互相摔,而不只是磨,也可以变 成石刀,3也许我又要多添一百种不同的事物,再多添120种不同的关系... " 也就是说我的要求可能是不断变化的,所以你要怎么样设计这个oo的模型,可以让我在实行1,2,3条的时候只做最小的修改....

原来CSDN上有这个贴子,我在他们的基础上修改了一些,TX们有没有更完美的解决方案呢?

以下是我的理解:
package 原始社会

abstract class 抽象石头{
abstract 相砸(另一个石头){}
abstract 相摔(另一个石头){}
abstract 相磨(另一个石头){}
}

abstract class 抽象石刀 extends 抽象石头{
abstract 砍(木头){}
abstract 砍(椅子){}
}

class 石头 extends 抽象石头{
相砸(另一个石头){......}
相摔(另一个石头){......}
相磨(另一个石头){......}

}

class 石刀 extends 抽象石刀{
石刀 (石头1,石头2){......}
砍(木头){......}
砍(椅子){......}
}

class 木头{
}

class 木材 extends 木头{
木材(石刀,木头){
石刀.砍(木头);
......
}
木材(石刀,椅子){
石刀.砍(椅子);
......
}

}

class 椅子 extends 木材{
椅子 (木材1,木材2...){......}
}



...全文
256 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yilexxy 2010-07-08
  • 打赏
  • 举报
回复
回楼上,要用继承。。。题目里有“2块石头互磨可以变成石刀”,就是说石刀有石头的属性,2块石头相磨也能变成石剑石斧,为了便于扩展要用继承,木头同理。
cslxss 2010-07-07
  • 打赏
  • 举报
回复
YUN A
jiang521725 2010-07-07
  • 打赏
  • 举报
回复
沙发沙发
abc130314 2010-07-07
  • 打赏
  • 举报
回复
LZ 举的例子,我觉得根本就用不到继承。

abstract class 石头 {

abstract 石刀 相砸(石头 arg);

abstract 石刀 相摔(石头 arg);

abstract 石刀 相磨(石头 arg);
}

abstract class 石刀 {

abstract 木材 砍(木头 arg);

abstract 木材 砍(椅子 arg);
}

abstract class 木头 {
}

abstract class 木材 {

abstract 椅子 加工();
}

abstract class 椅子 {
}
mopishv0 2010-07-07
  • 打赏
  • 举报
回复
应该将行为抽象出来 然后写个工厂
wj63558595 2010-07-07
  • 打赏
  • 举报
回复
没记错的话应该要用到DECORATOR 装饰器模式
yilexxy 2010-07-07
  • 打赏
  • 举报
回复
觉得晕的要去复习一下面向对象的基础知识了哈(*_*)
renjianguokeivor 2010-07-07
  • 打赏
  • 举报
回复
绕晕了。。
lhshbest 2010-07-07
  • 打赏
  • 举报
回复
写接口,然后去实现接口。。。
以后新增功能只需要修改接口和接口的实现类
yangyun_ncs 2010-07-07
  • 打赏
  • 举报
回复
好绕人啊

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧