1.swift框架设计基于构建者模式,oc使用这个模式较少
2.swift,c++,kotlin,java经常使用构建者模式
构建者模式定义(建造者模式、builder模式)
将一个复杂对象的创建
和表示
进行分离
,同时你的创建顺序不一样,表示也不一样。
解释:创建对象是一个过程(初始化,设置参数)创建UIView
表示(显示UI)也是一个过程
显示UIview也是一个过程->显示到哪里去
构建者模式使用场景
1.相同的方法,不同的调用顺序产生的结果不一样
2.多个组件都可以组装在同一个对象上,但是产生的结果不一样
例子:警告框的多种展示方式、各个组件组装摩托车
3.当一个类特别复杂的时候,并且初始化默认参数(网络请求)
构建者模式:角色划分
1.抽象产品->ProductProtocol(可有可无)
2.具体产品->ConcreteProduct(核心)
3.抽象构建者->BuilderProtocol(可有可无)
4.具体构建者->ConcreteBuilder(核心)
5.统一组装类->(可有可无)
构建者模式-开发案例
任务目标:构建ui消息提示框(达到效果动态构建ui)
分析角色
1.DMAlertController->(方便客户端调用)
- 持有参数类引用
- 提供进行组装的方法
2.构建者->builder(核心) - 持有参数类的引用
- 设置需要的参数
- 返回赋值完参数的构建产品
3.产品->alertController(核心) - 在组装类的show方法里进行创建和组装
4.参数类
DMAlertController.swift
import UIKit
//角色一、DMAlertController->(方便客户端调用)
class DMAlertController: NSObject {
private var params:BuilderParams
init(params:BuilderParams) {
self.params=params
}
func show(){
//组装
let alert=UIAlertController(title: self.params.title, message: self.params.message, preferredStyle:UIAlertController.Style.alert)
if((self.params.confirmText) != nil)
{
alert.addAction(UIAlertAction(title: self.params.confirmText, style: UIAlertAction.Style.destructive, handler: self.params.confirmHandler))
}
if((self.params.cancelText) != nil)
{
alert.addAction(UIAlertAction(title: self.params.cancelText, style: UIAlertAction.Style.destructive, handler: self.params.cancelHandler))
}
self.params.context?.present(alert, animated: true, completion: nil)
}
//角色四、参数类
class BuilderParams: NSObject {
var context:UIViewController?
var title:String?
var message:String?
var confirmText:String?
var cancelText:String?
var confirmHandler:((UIAlertAction)->Swift.Void)?
var cancelHandler:((UIAlertAction)->Swift.Void)?
init(_ context:UIViewController) {
self.context=context
}
}
//角色二、构建者->builder(核心)
class builder: NSObject {
private var params:BuilderParams
//传入ViewController(这里指调用者)
init(_ context:UIViewController) {
self.params=BuilderParams(context)
}
func setmessage(_ message :String) -> builder {
self.params.message=message
return self
}
func settitle(_ title :String) -> builder {
self.params.title=title
return self
}
func setconfirmText(_ confirmText :String) -> builder {
self.params.confirmText=confirmText
return self
}
func setcancelText(_ cancelText :String) -> builder {
self.params.cancelText=cancelText
return self
}
func setconfirmHandler(_ confirmHandler :((UIAlertAction)->Swift.Void)?) -> builder {
self.params.confirmHandler=confirmHandler
return self
}
func setcancelHandler(_ cancelHandler :((UIAlertAction)->Swift.Void)?) -> builder {
self.params.cancelHandler=cancelHandler
return self
}
//必须有的方法构建产品(必须实现)
func build() -> DMAlertController {
return DMAlertController(params: self.params)
}
}
}
viewcontroller.swift
@IBAction func click(_ sender: Any) {
DMAlertController.builder(self)
.settitle("温馨提示")
.setmessage("找妹子吗?")
.setconfirmText("确定")
.setconfirmText("取消")
.setconfirmHandler { (action) in
print("确定")
}
.setcancelHandler { (action) in
print("取消")
}.build().show()
}
}