在我的项目中,我想将对象池用于不同类型的对象——具有相似的行为,但池大小不同。
我应该为池和接口创建通用类以应用于创建的对象,还是应该创建具有通用逻辑的抽象池类,然后为我想要使用它的所有不同类创建特定的子类?
在我的项目中,我想将对象池用于不同类型的对象——具有相似的行为,但池大小不同。
我应该为池和接口创建通用类以应用于创建的对象,还是应该创建具有通用逻辑的抽象池类,然后为我想要使用它的所有不同类创建特定的子类?
好吧,您可以同时拥有这两种东西,即创建一个抽象的泛型类。我更喜欢由泛型类实现并为工厂方法/类后面的特定类型实例化的泛型接口。抽象类将强制创建派生类,使其更加乏味。我想到的示例用法类似于
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
请注意,它仍然可以通过从泛型类继承给我留下专门化的范围 - 典型的需要是创建复杂的实例(当然可以通过为池实现提供工厂接口或工厂委托来建模)
这是泛型类型的典型场景。所以我提倡通用池。
泛型只会在其他类使用对它的引用而不知道具体类型的情况下产生问题。在这种情况下,您可以创建由通用池类实现的非通用接口。