多个对象数组
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 有接口。一个对象可以实现多个接口。特别是因为他想要一个“简单的网上商店应用程序”以上是关于多个对象数组的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript 之 普通数组对象数组的去重(涉及多个场景)