【问题标题】:Design choice for two almost identical classes两个几乎相同的类的设计选择
【发布时间】:2013-09-19 09:26:15
【问题描述】:

我有两个类 Boat 和 Mines,它们的方法和变量完全相同。

唯一的区别是它们在不同的位置被初始化。

船用

xPosition = 3 y位置 = 4

为我的

x位置 = 1 y位置 = 1

我被明确告知不要为此使用继承,我还能用什么来改进设计

【问题讨论】:

  • 在不了解问题和背景的情况下,我认为这个问题没有很好的答案。
  • 你不能使用继承在所有,或两个类之间?这两个类之间是有道理的,因为它们彼此之间并不真正“相关”。
  • 嗯,基本上我有两个基本相同的类,为这两个类重新输入相同的代码感觉非常浪费(它们都使用完全相同的方法)。有没有其他方法可以解决这个问题。
  • 是的。遗产。可以用吗?
  • 不,我被特别告知不要使用它。

标签: java class metaclass


【解决方案1】:

你可以给他们一个位置类,给那个类 X 和 Y 的位置,让它成为矿井和船的属性。可悲的是,您仍然需要位置类的 getter/setter。

【讨论】:

    【解决方案2】:

    面向对象编程的想法正是出于这个原因。

    Boat 和 Mine 不应该是类,它们应该是由另一个类(我们称之为 waterStuff)制成的新对象。

    class waterStuff {
        public xPosition;
        public yPosition;
    }
    

    ...然后在代码中的某处将它们设置为新对象。我不使用 Java,所以我会尽可能接近: (这些可能在另一个类中,使用 waterStuff 作为命名空间以供参考)

    Boat = new waterStuff;
    Mine = new waterStuff;
    
    Boat->xPosition = 3;
    Boat->yPosition = 4;
    Mine->xPosition = 1;
    Mine->yPosition = 1;
    

    我希望我可以更具体地讲 java,但希望这能让你走上正轨。

    编辑:你不只是喜欢 CS101

    【讨论】:

      【解决方案3】:

      如果它们只是成员的值不同,那么在任何情况下继承似乎都毫无意义。但是有 2 个不相关的类会更糟。

      这样的事情怎么样?

      class SomeClass
      {
         int xPosition, yPosition;
         enum Type
         {
            Boat, Mine
         }
         public SomeClass(Type type)
         {
            if (type == Type.Boat)
            {
               xPosition = 3;
               yPosition = 4;
            }
            else
            {
               xPosition = 1;
               yPosition = 1;
            }
            // assign 'type' to a class variable here if required
         }
      }
      

      构造使用:

      new SomeClass(SomeClass.Type.Boat)
      

      或:

      new SomeClass(SomeClass.Type.Mine)
      

      您可能想选择一个比SomeClass 更好的名字。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-16
        • 1970-01-01
        • 2017-03-24
        • 1970-01-01
        相关资源
        最近更新 更多