IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 创建型模式之一建造者模式在kotlin中的应用 -> 正文阅读

[移动开发]创建型模式之一建造者模式在kotlin中的应用

????????不用设计模式我们开发出来的程序照样能用,那为什么我们还要用设计模式呢?设计模式在开发中有什么作用呢?使用设计模式和不使用设计模式的程序有什么不同呢?等等这一系列的问题,相信每个初学者甚至从事多年开发的Coder都会这样的疑问(地基打不好,房子能建好?(码字不容易,不喜勿喷哈!推荐个俱乐部:KotlinClub));设计模式的六大原则:

一、单一职责原则,实现类要职责单一

? ? ? 我就这一个任务,把这一个任务干好就行,别让其他人影响我,我想轻松的活着;

二、里氏替换原则,不要破坏继承体系

? ? ? ? 要想继承老子的财产,必须按着老子的来,否则别想集成? ? ? ??

三、依赖倒置原则,要面向接口编程

????????高层模块不应该依赖底层模块,二者都该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象? ? ? ??

四、接口隔离原则,在设计接口的时候要精简单一

? ? ? ?吃喝玩乐样样在行,干别的还是再找个人吧!

五、迪米特原则,要降低耦合

?????????我就认识你,就你给我谈,别人不行!

六、开闭原则,要对扩展开放,对修改关闭

? ? ? ? 老子就这么点财产,想要更多钱自己整去!? ? ? ??

? ? ? ?以上对原则的介绍有点xx,但凡识字就应该能理解啥意思吧,实在不懂,我也没法了;每个人可能对设计原则有不同的理解,但是万变不离其宗,都是建房子前需要打的地基,地基越牢,盖的越高;?这些原则在开发中发挥着一定的作用,有优点也有不足,我们在使用的时候就需要根据当前场景选择最合适的原则了;基于这些设计原则,衍生出了设计模式,每一种设计模式都遵循着对应的设计原则,原则就六条,但是设计模式却有23种;555。。。。。。整那么多条条框框干啥呢!不都说九九归一,返璞归真吗?为啥还要那么麻烦?(盖房子不打地基,房子能盖起来不?)

? ? ? ? 设计模式分为三大类,二十三小类(不要问我谁分的,我也不知道):

? ? ? ? 创建性:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

? ? ? ? 结构性:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

? ? ? ? 行为性:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

? 这些设计模式就是程序的地基,一旦打好地基想怎么造就怎么造;

扯了这么多,进入正题:创建型模式之一建造者模式在kotlin中的应用:

The intent of the Builder design pattern is to separate the construction of a complex object from its representation. By doing so the same construction process can create different representations.
建造者设计模式的目的是将复杂对象的构造与其表示分离。通过这样做,相同的构造过程可以创建不同的表示。

? ? ? ? 建造者模式在哪使用都是发挥这同样的作用,本质不变嘛!在我看来也就在代码风格上有些不同,kotlin在coding的时候更简洁,调用的时候更方便而已;下面分别使用kotlin写了一个打开小程序的工具类,这个工具类使用了建造者模式:

class WXMiniLaunchUitls(
    activity: AppCompatActivity,
    appId: String,
    userName: String,
    appPath: String,
    appType: String
) {
    companion object {
        val MINIPTOGRAM_TYPE_RELEASE = "0"
        val MINIPTOGRAM_TYPE_DEBUG = "1"
        val MINIPTOGRAM_TYPE_REVIEW = "2"
    }

    private val mActivity = WeakReference(activity)
    private val mAppId: String = appId
    private val mUserName: String = userName
    private val mAppPath: String = appPath
    private val mAppType: String = appType

    @SuppressLint("Recycle")
    fun openMini() {
        val resolver: ContentResolver = mActivity.get()!!.contentResolver
        val uri = Uri.parse("content://com.tencent.mm.sdk.comm.provider/launchWXMiniprogram")
        val path = arrayOf(mAppId, mUserName, mAppPath, mAppType, "")
        var cursor: Cursor
        if (resolver.query(uri, null, null, path, null).also { cursor = it!! } != null) {
            cursor.close()
        }
    }


    class Builder {
        var appId: String = ""
        var userName: String = ""
        var appPath: String = ""
        var appType: String = ""

        fun setAppId(appId: String): Builder {
            this.appId = appId
            return this
        }

        fun setUserName(userName: String): Builder {
            this.userName = userName
            return this
        }

        fun setAppPath(appPath: String): Builder {
            this.appPath = appPath
            return this
        }

        fun setAppType(appType: String): Builder {
            this.appType = appType
            return this
        }

        fun build(activity: AppCompatActivity): WXMiniLaunchUitls {
            return WXMiniLaunchUitls(activity, appId, userName, appPath, appType)
        }
    }
}

调用时不再使用new关键字,类似于直接调用静态方法:

WXMiniLaunchUitls.Builder().setAppId("")
    .setUserName("")
    .setAppPath("")
    .setAppType(WXMiniLaunchUitls.MINIPTOGRAM_TYPE_DEBUG)
    .build(this)
    .openMini()

? ? ? ? 这只是最基本的一种建造者模式实现方式,看出来跟Java有什么不同吗?变量的声明?对象的实例化?kotlin一直不温不火的,出世那么久,也就刚出来的时候比较火,难道它不值得用?我不这么认为,当你使用习惯了kotlin,你会发现爱不释手,不再想使用Java,kotlin的特性那么多,还是多多研究研究吧!

? ? ? ? 看到这里有人就会有这样的疑惑,一个工具类而已,至于使用设计模式吗?至不至于嘛!说实话,项目中我会使用设计模式,但是不会使用建造者模式,可能会使用单例模式,至于为啥你就细品吧!这个类也就我随便建的,今天主要说建造者模式:建造者模式最常见的使用者就是dialog,通过调用builder设置不同的属性,只需要设置用到的,不需要用的属性爱咋地咋地,有这个场景的你就可以考虑是否使用建造者模式了;设计模式的存在让我们的代码更健壮,易维护,让程序更加稳定。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-19 08:05:55  更:2021-09-19 08:06:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:23:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码