--

Thank you for the explanations. The power of the abstract factory pattern can be amplified using dependency injection. Using DI you can completely decouple the client from the classes it's using (dependency inversion principle). Using the chat types is a good first step but the client still determines the type of chat it's using ("FakeChat", "SdkChat"). DI can be simple constructor dependency injection e.g. MyClass(factory: ChatFactory) {...}

--

--