首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对象池:抽象超类还是泛型?

对象池:抽象超类还是泛型?
EN

Stack Overflow用户
提问于 2012-03-06 16:28:04
回答 3查看 624关注 0票数 0

在我的项目中,我希望对不同类型的对象使用对象池-具有相似的行为,但池大小不同。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-06 16:34:10

你可以同时做这两件事,比如创建一个抽象的泛型类。我更喜欢由泛型类实现的泛型接口,并在工厂方法/类后面为特定类型实例化。抽象类将强制创建派生类,使其更加繁琐。我脑海中的示例用法如下

代码语言:javascript
运行
复制
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

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

票数 2
EN

Stack Overflow用户

发布于 2012-03-06 16:54:06

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

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

票数 0
EN

Stack Overflow用户

发布于 2012-03-06 17:11:01

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

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

实际上,有一个通用的ObjectPool<T>实现here示例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9580189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档