0

在我的项目中,我想将对象池用于不同类型的对象——具有相似的行为,但池大小不同。

我应该为池和接口创建通用类以应用于创建的对象,还是应该创建具有通用逻辑的抽象池类,然后为我想要使用它的所有不同类创建特定的子类?

4

3 回答 3

2

好吧,您可以同时拥有这两种东西,即创建一个抽象的泛型类。我更喜欢由泛型类实现并为工厂方法/类后面的特定类型实例化的泛型接口。抽象类将强制创建派生类,使其更加乏味。我想到的示例用法类似于

IPool<MyClass> = PoolFactory.Get<MyClass>(5);  // 5 being pool size
IPool<IFoo> = PoolFactory.Get<FooImpl>(5);
IPool<IBar> = PoolFactory.Get(5, () => new BarImpl("some argument")); // instance creation with factory method

请注意,它仍然可以通过从泛型类继承给我留下专门化的范围 - 典型的需要是创建复杂的实例(当然可以通过为池实现提供工厂接口或工厂委托来建模)

于 2012-03-06T08:34:09.583 回答
0

这是泛型类型的典型场景。所以我提倡通用池。

泛型只会在其他类使用对它的引用而不知道具体类型的情况下产生问题。在这种情况下,您可以创建由通用池类实现的非通用接口。

于 2012-03-06T08:54:06.273 回答
0

这是一个典型的例子,说明为什么你应该更喜欢泛型Stack<T>而不是基于对象的Stack类,以及为什么引入泛型来解决基于对象的类问题。这在 MSDN here中进行了解释。

我想如果您使用第二个选项,那么您将不得不为要在其中创建new concrete class每个对象池引入一个,维护和开发future会很麻烦。因此,使用创建通用类的第一个选项,是的,您还可以使用第一个选项来利用设计模式的好处,如另一个答案中所述。Pool<T>Factory

事实上,这里有一个示例GenericObjectPool<T>实现。

于 2012-03-06T09:11:00.833 回答