构建者模式
2019-03-31 本文已影响0人
一毛钱
构建者模式-定义(建造者模式、builder模式)
将一个复杂对象的创建和配置进行分离。调用组件负责提供配置对象的数据,并负责将配置数据传递给中间人,即建造者。而建造者则代表调用组件创建对象。如此分离之后,调用组件就无需过多掌握其所使用的对象的信息,将默认配置信息集中放在建造者类中即可,而不用将这些信息散布于每一个需要创建对象的调用组件中。创建时所配置的参数不一样,生产出的具体产品也将不一样。
构建者模式-使用场景
如果创建对象需要进行复杂的配置,而你又不让默认配置在整个应用中传播,即可使用此模式。
场景一:相同方法,不同的调用顺序,不同的初始化参数,生产出的产品将不一样。
场景二:多个部件,都可以组装在一个对象上,但是产生的结果不一样
场景三:当一个类非常复杂的时候,并且进行初始化默认的参数(网络请求)
构建者模式-角色划分?
角色一:抽象产品->ProductPtotocol(可有可无)
角色二:具体产品->ConcreteProduct(核心)
角色三:抽象构建者->BuilderPtotocol(可有可无)
角色四:具体构建者->ConcreteBuilder(核心)
角色五:统一组装类(可有可无)
(通过产品使用组件,调用具体构建者配置不同的参数。然后由具体的构建者进行构建出具体的产品)
示例程序
//角色一:具体构建者。内部有需要创建具体产品所需的各项参数,并且全部需要设置初始值。
//有创建具体产品的方法 func build(name:String) -> Computer
// 外部调用该类初始化具体产品Computer时,可以不需要修改任何默认配置参数,也可以修改默认配置参数生产出不同的产品。
class ComputerBuilder: NSObject {
private var cpu:String = "XIAOLONG"
private var display:String = "HUAWEI"
private var gpu:String = "i5"
func cpu(_ cpu:String) -> ComputerBuilder {
self.cpu = cpu
return self
}
func display(_ display:String) -> ComputerBuilder {
self.display = display
return self
}
func gpu(_ gpu:String) -> ComputerBuilder {
self.gpu = gpu
return self
}
func build(name:String) -> Computer {
return Computer(name, self.cpu, self.display, self.gpu)
}
}
}
//角色二:具体产品(只由构建者创建,而不是通过其他调用组件创建,因为所需要的默认配置只在构建者(案例中角色一)中有)
class Computer: NSObject {
var name:String?
var cpu:String?
var display:String?
var gpu:String?
init(_ name:String,_ cpu:String,_ display:String,_ gpu:String) {
self.name = name
self.display = display
self.cpu = cpu
self.gpu = gpu
}
func printComputer() {
print(self.name!)
print(self.cpu!)
print(self.display!)
print(self.gpu!)
}
//外部调用
let builder = ComputerBuilder()
let computer = builder.cpu("I7指定处理器").build(name: "华为最新电脑")
computer.printComputer()