更多内容欢迎关注公众号:Swift花园
Swift中的抽象工厂
抽象工厂提供一种封装一组独立工厂的方式,这些独立工厂都有一个共同的主题。
抽象工厂的实现通常结合了简单工厂和工厂方法的准则。工厂方法创建独立的对象,然后所有的事情再经过一个“抽象的”的简单工厂包装起来。让我们一起来看下范例代码。 😅
// 服务协议
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://live.localhost/")! }
}
class ProductionServiceFactory: ServiceFactory {
func create() -> Service {
return ProductionService()
}
}
// 抽象工厂
class AppServiceFactory: ServiceFactory {
enum Environment {
case production
case staging
}
var env: Environment
init(env: Environment) {
self.env = env
}
func create() -> Service {
switch self.env {
case .production:
return ProductionServiceFactory().create()
case .staging:
return StagingServiceFactory().create()
}
}
}
let factory = AppServiceFactory(env: .production)
let service = factory.create()
print(service.url)如你所见,使用抽象工厂将会影响整个应用的逻辑,而工厂方法只影响到局部。在实现抽象工厂的时候,也可以为它创建一个单独的接口。
抽象工厂通常用于实现对象的独立。举个例子,如果你有多个不同的SQL数据库连接器(PostgreSQL, MySQL等),在 Swift 中用一个通用接口表示,你可以利用抽象工厂在它们之间轻松地切换。 类似的场景都能用这种模式。 🤔
我的公众号
这里有Swift及计算机编程的相关文章,以及优秀国外文章翻译,欢迎关注~
