【问题标题】:Java Factory Method PatternJava 工厂方法模式
【发布时间】:2018-06-30 02:05:32
【问题描述】:

请有人能帮助我理解我打算如何使用工厂方法模式来创建类 B 的新(继承)版本,然后用新方法覆盖一个方法,然后返回一个实例A 类的。(但可能还有一些其他不相关的东西)。

不要求任何人为我做这件事,如果有人能引导我朝着正确的方向前进,我会很高兴,因为我知道我能做到,但是找到那个开始的地方是个问题,而且截止日期非常接近,所以每一点有帮助。

解释->

我们正在修改的程序是使用 guis 与商店有关的预制程序。我们的任务是修改和改进它。最初的任务是将重复的产品项合并为多个产品的单个请求;即当前在控制台中像这样输出;

0003 Toaster ( 1) £ 19.99

0003 Toaster ( 1) £ 19.99

但应该看起来像;

0003 Toaster ( 2) £ 38.98

问题是这必须通过使用继承来完成,而整个程序中有大量的类。

我们的第一个任务是修改扩展 A 类的 B 类。(它还说我们必须创建 B 类的新实例而不是 A 类)。我们应该通过使用工厂方法模式来创建一个新的(继承的)C 类版本,用一个新方法覆盖方法“makeBasket”,然后返回一个 B 类的实例。所有这些都不需要实际更改任何代码C类。

我认为代码应该是这样的;

public class BetterCashierModel extends CashierModel {
@Override
protected Basket makeBasket()
{
return new BetterBasket();
}
}

但是我真的不确定,也不知道我打算把这段代码放在哪个类中。这项工作的措辞暗示它应该能够在某处适合 B 类,但我真的无法工作出去。

这是我们被告知要为这个特定任务编辑的类

注释掉的东西是我添加的,以便能够分辨出已经给我的东西。

package catalogue;

import java.io.Serializable;
import java.util.Collections;

 public class BetterBasket extends Basket implements Serializable
{
  private static final long serialVersionUID = 1L;


  // This is where I need to override the method 'add' in the class 'Basket'.
  // as well as create the newBasket i previously mentioned i suspect#

  // @Override
  // public boolean add( Product pr)
  // {
  // return super.add( pr ); 
}
}

对不起,如果这令人困惑或不允许,现在真的很想得到一些帮助,谢谢 :) (编辑格式 - 抱歉)

【问题讨论】:

  • 你能把代码格式化成代码吗?
  • 尽我所能去格式化
  • TL;DR 需要修改名为 BetterBasket 的类,该类扩展了类篮子,以便它覆盖特定方法,基本上是一个更好的篮子。但是使用工厂方法模式,需要将其与CashierModel类联系起来,使其创建一个BetterBasket的Instance,而不是原来的Basket

标签: java eclipse inheritance bluej factory-method


【解决方案1】:

我认为您只需要使用这样的逻辑覆盖BetterBasket 类中的add,该逻辑首先检查输入Product 是否已存储,为此您可能应该使用Basket 的受保护API。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多