最近学习到一个构建者模式的案例,感觉又有了点体会,记录一下,首先我们来分下角色的划分
- 角色一:组装类->ZXAlertController
- 角色二:构建者->Builder
- 角色三:产品->AlertController
- 角色四:构建者参数类->BuilderParams
首先我们先来看下我们的构建者参数类
import UIKit
//建造者参数类
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
}
}
再者就是构建者类
import UIKit
//构建者->Builder
class Builder: NSObject {
//含有建造者参数
private var params:BuilderParams
//初始化方法
init(_ context:UIViewController) {
self.params = BuilderParams(context)
}
//设置标题的方法
func setTitle(_ title:String) -> Builder
{
self.params.title = title
return self
}
//设置message
func setMessage(_ messgae:String) -> Builder
{
self.params.message = messgae
return self
}
//设置确定按钮的的text的方法
func setConfirmText(_ confirmText:String) -> Builder
{
self.params.confirmText = confirmText
return self
}
//设置取消按钮的text的方法
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() -> ZXAlertController
{
return ZXAlertController(params:self.params)
}
}
组装者类,这个也是我们的构建者类所创建的对象,组装者对象当中进行创建真正的对象也就是我们的UIAlertViewController
import UIKit
class ZXAlertController: NSObject {
//构建者参数
private var params:BuilderParams
//构建者对象
public var builder:Builder?
//初始化方法
init(params:BuilderParams) {
self.params = params
}
//进行组装的方法
func show()
{
let alert = UIAlertController(title: self.params.title, message: self.params.message, preferredStyle: UIAlertControllerStyle.alert)
if((self.params.confirmText) != nil)
{
//添加确定按钮的点击事件
alert.addAction(UIAlertAction(title: self.params.confirmText, style: UIAlertActionStyle.destructive, handler: self.params.confirmHandler))
}
if ((self.params.cancelText) != nil) {
//添加取消按钮的点击事件
alert.addAction(UIAlertAction(title: self.params.cancelText, style: UIAlertActionStyle.destructive, handler: self.params.confirmHandler))
}
//进行显示
self.params.context.present(alert,animated: true,completion: nil)
}
}
我们在外面使用的时候,我们就可以通过我们传递的信息的不同来显示不同的UI界面,比如说下面的使用方式
Builder(self)
.setTitle("温馨提示")
.setMessage("哈哈")
.setCancelText("取消")
.setConfirmText("确定啊")
.setCancelHandler { (action) in
print("点击取消")
}.setConfirmHandler({ (action) in
print("点击确定")
}).build().show()
得到的效果如下所示
如果我们将设置的参数减少些,我们查看下内容
Builder(self)
.setTitle("温馨提示")
.setMessage("哈哈")
.setCancelText("取消")
.setCancelHandler { (action) in
print("点击取消")
}.build().show()