August 10, 2020 Re: Factory pattern for classes | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ali Çehreli | On Sunday, 9 August 2020 at 15:56:31 UTC, Ali Çehreli wrote: > module deneme; > > import std.stdio; > > interface I { > void methodName(); > } > ... > I getClassById(uint id) > { > if (id == 0) { > return cast(A)Object.factory("deneme.A"); > } else if(id == 1) { > return cast(B)Object.factory("deneme.B"); > } else { > return cast(C)Object.factory("deneme.C"); > } > } > > void main() { > auto o = getClassById(1); > o.methodName(); > } Why not simply do? >I getClassById(uint id) >{ > if (id == 0) { > return new A(); > } else if(id == 1) { > return new B(); > } else { > return new C(); > } >} Then you can also pass parameters to the constructors or call further factories to create them, as long as they return a `I`-compatible type. |
Copyright © 1999-2021 by the D Language Foundation