Summary manufacturing facility in Swift
The abstract factory sample supplies a technique to encapsulate a bunch of particular person factories which have a typical theme with out specifying their concrete courses.
So abstract factory is there so that you can create households of associated objects. The implementation normally combines easy manufacturing facility & factory method rules. Particular person objects are created by means of manufacturing facility strategies, whereas the entire thing is wrapped in an “summary” easy manufacturing facility. Now test the code! 😅
protocol ServiceFactory
func create() -> Service
protocol Service
var url: URL get
class StagingService: Service
var url: URL return URL(string: "https://dev.localhost/")!
class StagingServiceFactory: ServiceFactory
func create() -> Service
return StagingService()
class ProductionService: Service
var url: URL return URL(string: "https://dwell.localhost/")!
class ProductionServiceFactory: ServiceFactory
func create() -> Service
return ProductionService()
class AppServiceFactory: ServiceFactory
enum Setting
case manufacturing
case staging
var env: Setting
init(env: Setting)
self.env = env
func create() -> Service
change self.env
case .manufacturing:
return ProductionServiceFactory().create()
case .staging:
return StagingServiceFactory().create()
let manufacturing facility = AppServiceFactory(env: .manufacturing)
let service = manufacturing facility.create()
print(service.url)
As you’ll be able to see utilizing an summary manufacturing facility will affect the entire software logic, whereas manufacturing facility strategies have results solely on native elements. Implementation can fluctuate for instance you might additionally create a standalone protocol for the summary manufacturing facility, however on this instance I needed to maintain issues so simple as I might.
Summary factories are sometimes used to realize object independence. For instance you probably have a number of completely different SQL database connectors (PostgreSQL, MySQL, and so forth.) written in Swift with a typical interface, you might simply change between them anytime utilizing this sample. Identical logic may very well be utilized for something with an analogous situation. 🤔