我有一个接口TestInterface,不同的类可以实现该接口。是否可以拥有实现接口的所有对象的集合?可以使用
创建集合LinkedList<TestInterface> store
其中store是集合的名称。但是如何跟踪实现TestInterface的类的对象创建。还有哪里可以保留收藏品?
答案 0 :(得分:0)
不知道你想要什么,这很难说。
但无论如何,是的,您可以创建一个集合,但为了跟踪和存储对TestInterface
个对象的引用,您必须控制它们的创建。
最简单的方法是使用TestInterfaceFactory
(请参阅AbstractFactory模式),这也是使store
集合与实例引用保持一致的好地方。
答案 1 :(得分:0)
是否可以拥有实现该接口的所有对象的集合?
理论上是的。
实际上,只有在创建对象实例的所有内容都将其添加到列表中时,它才会起作用。这可能会使它变得不切实际......除非你改变对象的创建方式。
一种方法是使用工厂,但是如果不使用经过精心设计的工厂,就没有什么可以阻止某些代码创建实例。
另一种方法是用抽象基类替换接口,抽象基类的构造函数保证每个新实例都添加到列表中。这不能使用普通代码破坏。但是,如果使用Java对象序列化(或类似),则需要在基类中放置一个“钩子”,以确保将反序列化的对象添加到列表中。
请注意,包含某些接口或类的所有实例的集合可能是一个巨大的内存泄漏。你可能需要对此做些什么;例如使用弱引用。
答案 2 :(得分:0)
如果您迫切需要自动进行此操作,那么在原则中,您可以:
无论哪种方式,如果接口是你的,那么引入一个编程约定,将该接口的所有实现实例添加到集合中肯定更容易,如果更容易出错。