更多内容欢迎关注公众号:Swift花园
工厂方法只是一个非静态方法
说起工厂方法模式,十分简单。它通常是由简单的协议和类实现的。让我们从一个最简单的粒子开始吧:想象一个类,它能为你的服务终端创建一个 URL,姑且称它为服务工厂吧。 😅
class ServiceFactory {
func createProductionUrl() -> URL {
return URL(string: "https://localhost/")!
}
}
let factory = ServiceFactory()
factory.createProductionUrl()你可能会想,这个跟工厂方法模式有啥关系呢?且慢,让我再加一些东西,一个服务类的协议和一个返回 url 的协议。现在我们可以单独实现基础的 url 协议,并且从产品服务工厂那获得特定的实现:
protocol ServiceFactory {
func create() -> Service
}
protocol Service {
var url: URL { get }
}
class ProductionService: Service {
var url: URL { return URL(string: "https://localhost/")! }
}
class ProductionServiceFactory: ServiceFactory {
func create() -> Service {
return ProductionService()
}
}
let factory = ProductionServiceFactory()
let request = factory.create()为什么要把逻辑分成两个协议加两个类呢?相信我,解耦会是一件好事。从现在开始,你可以轻松地实现一个模拟的服务,返回一个虚拟的url,用这个url来测试代码。明显地,这样将需要用到一个与服务匹配的工厂类。
有了这些模拟的实例,你可以在实现服务协议的同时无痛地添加新的类型,而不必动到原始的代码。工厂方法一次解决一个简单工厂模式的特定问题。如果 switch-case 里的列表太长,只用一个工厂来维护对象创建将会变得很困难。工厂方法通过引入多个工厂对象解决这个问题。
我的公众号
这里有Swift及计算机编程的相关文章,以及优秀国外文章翻译,欢迎关注~