Kotlin 自带的Builder建造者模式

Kotlin自带Builder建造者模式,再也不用像Java中,写那么多代码了,必须点赞 !!!
接下来我们来看下如何使用。

方式一

首先,我们新建一个类

class Person {
    var name = ""
    var age = 0
    var married = false

    override fun toString(): String {
        return "Person(name='$name', age=$age, married=$married)"
    }
}

然后,进行调用

val person = Person().apply {
    name = "zhk"
    age = 18
    married = false
}
Log.i("Test", person.toString())

运行程序,可以看到日志

I/Test: Person(name='zhk', age=18, married=false)

apply: 在kotlin中被叫做一种作用域函数

方式二

新建一个类

class MyDialog {
    var title = ""
    var content = ""

	//这里使用了 内联函数(inline) 以避免lambda的额外开销。
    inline fun show(func: MyDialog.() -> Unit) {
        this.func()
        this.show()
    }

    fun show(){
        //...
    }
}

然后进行调用

MyDialog().show {
   title = "标题"
   content = "内容XXXX"
}

这种方式在kotlin中被称作DSL回调

方式三

新建一个类

class MyDialog {
    private var tvTitle: TextView? = null
    private var tvContent: TextView? = null

    init {
        val layoutInflater = LayoutInflater.from(Global.getContext())
        val rootView = layoutInflater.inflate(R.layout.dialog_avatar,null)
        tvTitle = rootView.findViewById(R.id.tv_title)
        tvContent = rootView.findViewById(R.id.tv_content)
        //...
    }

    fun title(@StringRes res: Int? = null, text: CharSequence? = null): MyDialog {
        if (res != null) {
            this.tvTitle?.text = Global.getContext().getString(res)
        } else if (text != null) {
            this.tvTitle?.text = text
        }
        return this
    }

    fun content(@StringRes res: Int? = null, text: CharSequence? = null): MyDialog {
        if (res != null) {
            this.tvContent?.text = Global.getContext().getString(res)
        } else if (text != null) {
            this.tvContent?.text = text
        }
        return this
    }

	//这里使用了 内联函数(inline) 以避免lambda的额外开销。
    inline fun show(func: MyDialog.() -> Unit) {
        this.func()
        this.show()
    }

    fun show() {
        //...
    }
}

进行调用

MyDialog().show {
    title(res = R.string.login_title)
    content(text = "内容XXXX")
}

可以自行选择传入res或text,并且可以控制传参,做一些额外操作。

Kotlin中使用MVP模式实现手势解锁可以提高代码的可维护性和可测试性。下面是一个简单的示例,展示了如何在Kotlin中使用MVP模式实现手势解锁。 首先,我们需要定义三个基本的MVP组件:视图(View)、Presenter(Presenter)和模型(Model)。 1. 视图(View):负责展示界面和处理用户交互。 ```kotlin interface GestureLockView { fun showPatternError() fun showPatternSuccess() } ``` 2. Presenter(Presenter):作为视图和模型之间的中间层,处理用户交互和业务逻辑。 ```kotlin class GestureLockPresenter(private val view: GestureLockView) { private val model = GestureLockModel() fun checkPattern(pattern: List<Int>) { if (model.isPatternCorrect(pattern)) { view.showPatternSuccess() } else { view.showPatternError() } } } ``` 3. 模型(Model):负责存储和验证手势解锁的模式。 ```kotlin class GestureLockModel { private val correctPattern = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9) fun isPatternCorrect(pattern: List<Int>): Boolean { return pattern == correctPattern } } ``` 接下来,在Activity或Fragment中实现视图(View)接口,并初始化Presenter(Presenter): ```kotlin class GestureLockActivity : AppCompatActivity(), GestureLockView { private lateinit var presenter: GestureLockPresenter override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_gesture_lock) presenter = GestureLockPresenter(this) // 处理手势解锁的逻辑 gestureLockView.setOnPatternListener(object : GestureLockView.OnPatternListener { override fun onPatternDetected(pattern: List<Int>) { presenter.checkPattern(pattern) } }) } override fun showPatternError() { Toast.makeText(this, "手势解锁失败", Toast.LENGTH_SHORT).show() } override fun showPatternSuccess() { Toast.makeText(this, "手势解锁成功", Toast.LENGTH_SHORT).show() } } ``` 在上述示例中,视图(View)通过调用Presenter(Presenter)的方法来处理手势解锁的逻辑。Presenter(Presenter)根据模型(Model)的验证结果来通知视图(View)展示相应的消息。 希望这个示例能够帮助你理解如何在Kotlin中使用MVP模式实现手势解锁。当然,实际的实现可能会更加复杂,但这个示例可以作为一个起点来进行扩展和定制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

氦客

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值