构建者模式案例体现

最近学习到一个构建者模式的案例,感觉又有了点体会,记录一下,首先我们来分下角色的划分

  • 角色一:组装类->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()

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值