多个对象数组

Posted

技术标签:

【中文标题】多个对象数组【英文标题】:Multiple objects to array 【发布时间】:2013-01-27 17:38:27 【问题描述】:

我目前正在制作一个简单的网上商店应用程序。网店需要将三种物品添加到购物车中。一张CD、一本书或一个游戏。我为每个具有toString() 方法的对象创建了一个类。

现在我必须创建一个方法add(..),它需要将指定的对象添加到一个名为 shoppingcart 的 ArrayList 中。此方法需要在 Webshop 类中调用,该类本身具有已创建的对象。

我知道如何使用多个添加方法来做到这一点,但需要使用单一方法来做到这一点。

【问题讨论】:

【参考方案1】:

您可能想要创建一个名为AbstractItem 的新类型,并且您的所有其他类型都从该类型扩展而来。将这个抽象类隐藏在接口后面也是一个好习惯。因此,AbstraxtItem 类可以实现定义公共 API 的 Item 接口。

AbstractItem 类将定义其子类型应实现的一些抽象方法,如 getPrice() 以及可能是所有子类的共同行为的其他具体方法。购物车将是一个ArrayList<Item>,并由add(Item) 方法填充。

【讨论】:

继承在今天通常不是理想的方式。我认为接口方法更合适。 (记住喜欢组合而不是继承)。并且不要忘记可测试性,编程到接口。 你是对的。我编辑了我的答案。如果你还在学术界,我希望你能在一家所有开发人员都尊重你列举的原则的公司工作。如果不是,那么我有一个问题:您的所有同事都遵守这些规则吗? 我删除了我的反对票,但是对于抽象类,你也必须小心。在我们公司,在我们的部门,我们有两个团队:一个 Back offixe,一个嵌入式团队。后台团队遵循接口原则,但引入了抽象类的一些设计缺陷,以及巨大的继承链(违反原则)。嵌入式 (java) 团队:60% 遵循接口,50% 遵循单元测试。 不错的组,你通常不会达到这么高的百分比:) 是的,所有人都非常有经验,至少有 10 年的软件经验,我们开发的设备和相关服务器已用于数十万辆汽车。私下我开发了一个 ios 应用程序,在 Objectiv-c 中我的经验较少,而且我不遵循接口原则,很好问为什么。在java中,这一切都更舒适。【参考方案2】:

商店中可以添加的每个对象都应实现interface IProduct. 然后,您有一个 IProduct 列表,您可以添加它。

ArrayList<IProduct> shoppingBasket = new ArrayList<IProduct>();

【讨论】:

好的,我现在想起来了,。为什么我投了反对票,我会在您的回答中添加评论。【参考方案3】:

您可以让 CD、Book 和 Game 类实现 Interface,例如ShopObject。 然后你可以像这样拥有你的shoppinCart:

ArrayList<ShopObject> shoppingCart = new ArrayList<ShopObject>();

【讨论】:

【参考方案4】:

OOP可以帮你解决这个问题:

    如果您发现CD, Book or Game 有一些共同的属性,那么您可以使用具有共同特征的基类,并让所有这些扩展该类。

    所以CD, Book and Game 扩展了一个类说 Product 并且您提供了一个以Product 作为参数的通用添加方法。

    添加(产品产品);

    如果CD, Book and Game 共享任何共同的功能,那么您也可以使用 OOP 功能以更简单的方式添加所有这些;但是这里你需要使用方法overloading

    添加(CD cd);

    添加(书本);

因此建议,考虑一下您的应用程序设计,然后对其中一种方法进行咨询。

【讨论】:

【参考方案5】:

您可以使用判别式将所有对象聚合为一个,以指示哪个对象真正被表示,非常类似于 Ada 中的变体记录或 C 中的联合。

你有一个完整的例子:http://lambda-the-ultimate.org/node/2694#comment-40453

【讨论】:

没有必要使用矫枉过正的方法:Java 有接口。一个对象可以实现多个接口。特别是因为他想要一个“简单的网上商店应用程序”

以上是关于多个对象数组的主要内容,如果未能解决你的问题,请参考以下文章

用js 对拥有多个对象的数组进行排序

从多个对象数组中返回具有最高值的对象

JavaScript 之 普通数组对象数组的去重(涉及多个场景)

JavaScript 之 普通数组对象数组的去重(涉及多个场景)

多个对象的连接合并多个数组的连接合并

js处理一个数组中包含多个对象,根据对象的一个属性查找到这个对象