题目:假设是原始社会,有石头,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...){......}

解决方案 »

  1.   

    没记错的话应该要用到DECORATOR 装饰器模式
      

  2.   

    LZ 举的例子,我觉得根本就用不到继承。abstract class 石头 {    abstract 石刀 相砸(石头 arg);    abstract 石刀 相摔(石头 arg);    abstract 石刀 相磨(石头 arg);
    }abstract class 石刀 {    abstract 木材 砍(木头 arg);    abstract 木材 砍(椅子 arg);
    }abstract class 木头 {
    }abstract class 木材 {    abstract 椅子 加工();
    }abstract class 椅子 {
    }