mardi 3 avril 2018

Most efficient way to add subclass objects to collection

I am implementing a factory pattern of sorts with my project. I have a class GeneralFactory which acts as a base class to SpecificFactory. Each Factory class creates its own SpecificProduct. My pattern differentiates from a classic factory pattern in the sense that the base Factory class GeneralFactory is not a pure abstract class and contains the bulk of the implementation for all Specific Factory classes (there are not many things differentiating Factory classes). The base GeneralFactory contains a collection of Products and has a function virtual std::shared_ptr<Product> createProduct(...). Each of the SpecificFactory classes override the implementation to create their own SpecificProduct.

Is there a way to not need to override virtual std::shared_ptr<Product> createProduct(...) in GeneralFactory? I have shared functionality that should execute within createProduct but I do not want to add that functionality to every SpecificFactory class's implementation of virtual std::shared_ptr<Product> createProduct(...).

I am currently thinking of creating a non-virtual function within GeneralFactory that will then call the overridden createProduct function, but is there a better way to do this?

Class Hierarchy

GeneralFactory --ParentOf--> SpecificFactoryA

GeneralFactory --ParentOf--> SpecificFactoryB

...

Product --ParentOf--> SpecificProductA

Product --ParentOf--> SpecificProductB

...

SpecificFactoryA --Creates--> SpecificProductA

SpecificFactoryB --Creates--> SpecificProductB

...

GeneralFactory --HasA--> Collection<Product>

I am using C++17 if that affects anything.

Aucun commentaire:

Enregistrer un commentaire